在同一个表轨道模型中具有两个字段的唯一性

时间:2012-07-09 07:28:50

标签: ruby-on-rails ruby

有没有办法验证同一模型中两个或多个字段的唯一性?例如,假设我有字段:name:zip。可接受的设置为{[name1, zip1], [name1, zip2]},但您不能在同一个表中拥有{[name1,zip1],[name1,zip1]}

是否可以使用rails validates方法?

3 个答案:

答案 0 :(得分:2)

您应该使用scope

  validates_uniqueness_of :name, :scope => [:zip]

有关详细信息,请参阅documentationguide

您可以使用:scope选项指定用于限制唯一性检查的其他属性。

答案 1 :(得分:2)

另一种方式

validates :name, :uniqueness => {:scope => [:zip]}

答案 2 :(得分:2)

您可以使用其他人告诉您的验证来执行此操作,但您也可以向表中添加唯一索引。这样可以防止在数据库层上插入重复项并提高选择速度。您需要为rails g migration addUniqueIndexForZipAndNameToTablename

创建新的迁移
add_index :tablename, [:name, :zip], :unique => true

您可能遇到的唯一问题是,当您尝试插入需要使用

阻止的副本时,存在MySQL错误
begin
  # insert,...
rescue ExceptionHere
  # do sth...
end