有没有一种方法来验证同一模型中两个或多个字段的唯一性?例如,假设我的字段为:name
和:zip
。可以接受的设置为{[name1, zip1], [name1, zip2]}
,但不能在同一个表中有{[name1,zip1],[name1,zip1]}
。在同一个表轨模型中有两个字段的唯一性
有没有可以使用的导轨validates
方法?
有没有一种方法来验证同一模型中两个或多个字段的唯一性?例如,假设我的字段为:name
和:zip
。可以接受的设置为{[name1, zip1], [name1, zip2]}
,但不能在同一个表中有{[name1,zip1],[name1,zip1]}
。在同一个表轨模型中有两个字段的唯一性
有没有可以使用的导轨validates
方法?
你应该使用scope
:
validates_uniqueness_of :name, :scope => [:zip]
有关更多信息,请参见documentation和guide。
您可以使用:scope
选项指定用于限制唯一性检查的其他属性。
另一种方式
validates :name, :uniqueness => {:scope => [:zip]}
为此,您可以使用验证像别人告诉你,但你也可以添加一个唯一索引表。这将防止在数据库层上插入重复项并提高选择速度。您需要创建为rails g migration addUniqueIndexForZipAndNameToTablename
add_index :tablename, [:name, :zip], :unique => true
你可能会得到唯一的问题是,有MySQL的错误,当您尝试插入你需要避免重复一个新的迁移,使用
begin
# insert,...
rescue ExceptionHere
# do sth...
end
隐而不宣”这是否意味着名称不能相同? – locoboy 2012-07-09 07:42:17
:姓名和:zip同时不能相同。 – tiktak 2012-07-09 07:44:15
“您可以使用:scope选项指定用于限制唯一性检查的其他属性。”有点不清楚。限制是否意味着它使属性包含唯一性? – locoboy 2012-07-09 08:54:31