2016-06-24 81 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

你閱讀有關的文檔'唯一性'可以和不可以做? – Zabba

+0

嗨,你可以請你分享你的控制器代碼,因爲你已經寫了它應該工作的寫入語法。 –

+0

@Bharat Soni,我已經分享了我的控制器的代碼 – Vishal

回答

0

嘗試考慮大小寫。

validates :custom_link, uniqueness: {case_sensitive: false} 

您能提供一個允許多次創建的示例嗎?

你什麼時候創建相同的值,在新創建,更新現有對象等?

+0

Thanx回覆Keith。我也試過這個。但它不起作用。我正在嘗試在更新時創建相同的值。 – Vishal

0

你應該在你的數據庫添加一個唯一索引,如說:http://guides.rubyonrails.org/active_record_validations.html#uniqueness

2.11獨特 這幫助驗證該屬性的值是唯一正確的對象被保存之前。它不會在數據庫中創建唯一性約束,因此可能會出現兩個不同的數據庫連接爲您打算唯一的列創建兩個具有相同值 的記錄。爲避免這種情況,您必須在您的數據庫的兩列上創建一個唯一索引 。有關多列索引的更多詳細信息,請參見MySQL 手冊。

添加遷移與約束如下:

rails g migration add_uniqueness_to_custom_link 

然後寫新的索引:

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

最後:rake db:migrate