轨道两个领域组合的唯一性

时间:2012-07-18 16:00:48

标签: ruby-on-rails

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

2 个答案:

答案 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)