0

我有一个字段 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。谢谢

4

2 回答 2

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如果有任何记录具有 (a = 1 AND b = 2) OR (a = 2 AND b = 1),这将向属性添加验证错误。

于 2012-07-18T16:12:11.750 回答
0

可能想看看 http://compositekeys.rubyforge.org/

于 2012-07-18T16:10:10.647 回答