0

(同じ種類の) 2 つのオブジェクト間の双方向リンクを保存することになっている単純なモデル "Match" があります。

class Match < ActiveRecord::Base
  belongs_to :obj1, :class_name => "MyModel", :foreign_key => :obj1_id
  belongs_to :obj2, :class_name => "MyModel", :foreign_key => :obj2_id

...
end

私が抱えている問題は、発見した双方向の各 Match に対して、2 つのデータベース エントリを取得することです。例 1: obj1 -> obj2、2: obj2 -> obj1

validates_uniqueness_ofここでこれを回避するにはどうすればよいですか?私は試した

validates_uniqueness_of :obj1_id, :scope => :obj2_id
validates_uniqueness_of :obj2_id, :scope => :obj1_id

しかし、それはうまくいきませんでした。

4

1 に答える 1

0
validates_uniqueness_of :obj1_id, :scope => :obj2_id

def validate
  if find(:first, :conditions => { :obj1 => obj2, :obj2 => obj1 })
    errors.add_to_base("already exists")
  end
end

かなり醜い。一意のデータベース インデックスをいくつか追加します。

于 2009-07-25T04:50:28.937 に答える