我正在尝试将唯一性验证应用于字段名称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 :(得分:0)
尝试考虑案例。
validates :custom_link, uniqueness: {case_sensitive: false}
您能否提供一个允许多次创建的示例?
您何时创建相同的值,新创建,更新现有对象等?
答案 1 :(得分: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