唯一性验证无效

时间:2016-06-24 05:33:15

标签: ruby-on-rails validation unique

我正在尝试将唯一性验证应用于字段名称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

不知道它为什么不起作用。任何人都可以帮助我吗?

2 个答案:

答案 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