Ruby on rails 同一表rails模型中两个字段的唯一性
是否有方法验证同一模型中两个或多个字段的唯一性?例如,假设我有字段Ruby on rails 同一表rails模型中两个字段的唯一性,ruby-on-rails,ruby,Ruby On Rails,Ruby,是否有方法验证同一模型中两个或多个字段的唯一性?例如,假设我有字段:name和:zip。可接受的集合应该是{[name1,zip1],[name1,zip2]},但不能在同一个表中包含{[name1,zip1],[name1,zip1]} 是否有可以使用的rails验证方法?您应该使用范围: validates_uniqueness_of :name, :scope => [:zip] 有关更多信息,请参阅和 您可以使用:scope选项指定用于限制唯一性检查的其他属性。另一种方法 v
:name
和:zip
。可接受的集合应该是{[name1,zip1],[name1,zip2]}
,但不能在同一个表中包含{[name1,zip1],[name1,zip1]}
是否有可以使用的rails
验证方法?您应该使用范围
:
validates_uniqueness_of :name, :scope => [:zip]
有关更多信息,请参阅和
您可以使用: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
这是否意味着名称不能相同?:name和:zip不能同时相同。“您可以使用:scope选项指定用于限制唯一性检查的其他属性。”有点不清楚。限制是否意味着它使属性具有唯一性?它意味着对象按:scope
参数分组,并且在组中按:name
检查唯一性。如果未指定:范围
,则检查整个表的唯一性。在另一种情况下,对具有相同:scope
参数的对象检查唯一性。那么说验证:name,scope:[:zip,:name]
的唯一性是否合法?