2

有没有办法验证同一模型中两个或多个字段的唯一性?例如,假设我有字段:name:zip. 一个可接受的集合是{[name1, zip1], [name1, zip2]},但你不能{[name1,zip1],[name1,zip1]}在同一张桌子上。

有没有validates可以使用的rails方法?

4

3 回答 3

2

你应该使用scope

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

有关更多信息,请参阅文档指南

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

于 2012-07-09T07:35:42.957 回答
2

其他方式

validates :name, :uniqueness => {:scope => [:zip]}
于 2012-07-09T07:37:41.287 回答
2

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

add_index :tablename, [:name, :zip], :unique => true

您可能遇到的唯一问题是,当您尝试插入重复项时出现 MySQL 错误,您需要防止使用

begin
  # insert,...
rescue ExceptionHere
  # do sth...
end
于 2012-07-09T13:06:14.883 回答