0

У меня есть простая модель «Матч», которая должна сохранять двунаправленную связь между двумя объектами (одного типа).Двунаправленный график в рельсах

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 

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

ответ

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 

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

Смежные вопросы