2016-06-24 8 views
0

フィールド名custom_linkに一意性の検証を適用しようとしています。しかし、フィールドに同じ値を追加することができます。続き は私のモデルである:一意性検証が機能しない

class Gallery < ActiveRecord::Base 
.... 
validates :custom_link, uniqueness: true 
.... 
end 

これは、コントローラの私のコードです:それは働いていない理由

def update 
     respond_to do |format| 
     if @gallery.update(gallery_params) 
     format.html { redirect_to galleries_galleryhome_path(id: params[:id]), notice: 'Gallery was successfully updated.' } 
     format.json { render :show, status: :ok, location: @gallery } 
     else 
     format.html { render :edit } 
     format.json { render json: @gallery.errors, status: :unprocessable_entity } 
     end 
    end end 
private: 

def gallery_params 
     params.require(:gallery).permit(:name, :shoot_date, :release_date, :expiration_date, :archive,:gallery_layout_id, :contact_id,:status, :cover_url,:gallery_photo_id, photos_attributes: [:image]).merge(brand_id: current_brand.id,user_id: current_user.id) 
    end 

は考えを取得しません。誰でも助けてくれますか?

+0

self.change add_index :galleries, :custom_link, unique: true end 

そして最後に一意性はできますかできませんか? – Zabba

+0

こんにちは、あなたはコントローラコードを共有してください。 –

+0

@Bharat Soni、私のコントローラのコードを共有しました – Vishal

答えて

0

ケースを検討してください。

validates :custom_link, uniqueness: {case_sensitive: false} 

何回作成することが許可されているかの例を挙げることができますか?

いつ、同じ値を作成していますか、新しい作成時に、既存のオブジェクトの更新時などですか?で述べたように

+0

返答キーインのためのThanx。私もこれを試しました。しかし、それは動作していません。私は更新時に同じ値を作成しようとしています。 – Vishal

0

あなたは、あなたのDBに一意のインデックスを追加する必要があります:http://guides.rubyonrails.org/active_record_validations.html#uniqueness

2.11を一意 このヘルパーは、オブジェクトが保存される前に、属性の値が一意の権利であることを検証します。データベース内で 一意性制約が作成されないため、2つの異なるデータベース接続が同じ値の2つのレコードを作成することがあります。 は、一意にする予定です。これを避けるには、 データベース内の両方の列にユニークなインデックスを作成する必要があります。複数列インデックスの詳細については、MySQL マニュアルを参照してください。

次のようにその制約での移行を追加します。

rails g migration add_uniqueness_to_custom_link 

次に、新しいインデックス書く:あなたはどのような `についてのドキュメントを読みましたrake db:migrate