2011-03-14 2 views
36

여기 has_manySystems 인 모델 PointOfContact가 있습니다. Systems 쪽에서 PointOfContacttechnical_manager 또는 project_manager (또는 둘 다)으로 식별하고 싶습니다. DB에 항상 PointOfContact 만 보관하는 동안.두 모델의 모델은 해당 소유자 계열의 모델입니다.

내 시도는 다음과 : 내 사양 (예는 다음)를 실행하면

class System < ActiveRecord::Base 
    belongs_to :project_manager, :class_name => 'PointOfContact' 
    belongs_to :technical_manager, :class_name => 'PointOfContact' 
end 

class PointOfContact < ActiveRecord::Base 
    has_many :systems 
end 

내가 제대로 접촉 협회의 System 지점을 만들 수 있습니다. 그러나 PointOfContact은 시스템과의 연관을 인식하지 못합니다. 왜 그런가요?

@sys = System.create 
@tm = PointOfContact.create 
@pm = PointOfContact.create 

@sys.project_manager = @pm 
@sys.technical_manager = @tm 

@pm.systems.should have(1).items #> expected 1 items, got 0 

답변

62

덕분에 RailsForum.com에 이상 jamesw합니다 : Same Model for Two belongs_to Associations 해결책이 발견되었습니다.

class System < ActiveRecord::Base 
    belongs_to :project_manager, :class_name => 'PointOfContact', :foreign_key => 'project_manager_id' 
    belongs_to :technical_manager, :class_name => 'PointOfContact', :foreign_key => 'technical_manager_id' 
end 

class PointOfContact < ActiveRecord::Base 
    has_many :project_managed_systems, :class_name => 'System', :foreign_key => 'project_manager_id' 
    has_many :technical_managed_systems, :class_name => 'System', :foreign_key => 'technical_manager_id' 
end 
+0

자세한 내용은 다음을 참조하십시오. [link] (http://railscasts.com/episodes/163-self-referential-association?view=asciicast) – Zippie

관련 문제