我有一个字段 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。谢谢
我有一个字段 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。谢谢
据我所知,内置的唯一性验证器不支持这一点。您必须为此编写自定义验证,例如:
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
如果有任何记录具有 (a = 1 AND b = 2) OR (a = 2 AND b = 1),这将向属性添加验证错误。