0

두 종류의 객체 (같은 종류) 사이에 양방향 링크를 저장하는 간단한 모델 "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 

그러나 작동하지 않았습니다.

답변

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 

꽤 못생긴. 고유 한 데이터베이스 색인을 추가하십시오.