我有一个带有字段a,b的模型。我想确保a和b的组合在表中是唯一的,所以a = 1,b = 2和a = 2,b = 1会引发冲突。
我试过validates_uniqueness_of :a, :scope => :b
,但它只确保没有两个
a = 1,b = 2行可以存在,我也想过滤出a = 2,b = 1。感谢
答案 0 :(得分:2)
据我所知,内置的唯一性验证器不支持这一点。您必须为此编写自定义验证,例如:
class MyModel < AR::Base
validate :my_custom_validation
def my_custom_validation
if self.class.where("(a = :a AND b = :b) OR (a = :b AND b = :a)", {:a => a, :b => b}).exists?
errors.add(:a, :taken)
end
end
end
如果有任何记录(a = 1 AND b = 2)OR(a = 2 AND b = 1),这将向属性a
添加验证错误。
答案 1 :(得分:0)