フィールド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を除外したいと思います。ありがとう
フィールド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を除外したいと思います。ありがとう
私の知る限り、組み込みの一意性バリデーターはそれをサポートしていません。そのためのカスタム検証を作成する必要があります。例:
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)のレコードがある場合、属性に検証エラーが追加されます。
http://compositekeys.rubyforge.org/をご覧になることをお勧めし ます