2012-07-09 59 views
2

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

有没有可以使用的导轨validates方法?

回答

2

你应该使用scope

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

有关更多信息,请参见documentationguide

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

+0

隐而不宣”这是否意味着名称不能相同? – locoboy 2012-07-09 07:42:17

+1

:姓名和:zip同时不能相同。 – tiktak 2012-07-09 07:44:15

+0

“您可以使用:scope选项指定用于限制唯一性检查的其他属性。”有点不清楚。限制是否意味着它使属性包含唯一性? – locoboy 2012-07-09 08:54:31

2

另一种方式

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

为此,您可以使用验证像别人告诉你,但你也可以添加一个唯一索引表。这将防止在数据库层上插入重复项并提高选择速度。您需要创建为rails g migration addUniqueIndexForZipAndNameToTablename

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

你可能会得到唯一的问题是,有MySQL的错误,当您尝试插入你需要避免重复一个新的迁移,使用

begin 
    # insert,... 
rescue ExceptionHere 
    # do sth... 
end 
相关问题