Двунаправленный граф в рельсах

У меня есть простая модель "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

У меня проблема в том, что для каждого обнаруженного двунаправленного соответствия я получаю две записи в базе данных. Например, 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

но это не сработало.

1 ответ

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

Довольно уродливые. Добавьте несколько уникальных индексов базы данных.

Другие вопросы по тегам