Двунаправленный граф в рельсах
У меня есть простая модель "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
Довольно уродливые. Добавьте несколько уникальных индексов базы данных.