0

フィールドa、bのモデルがあります。aとbの組み合わせがテーブル内で一意であることを確認したいので、a = 1、b=2およびa=2、b=1は競合を引き起こします。

私は試しvalidates_uniqueness_of :a, :scope => :bましたが、2つの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 に答える