2011-03-14 11 views
36

मेरे पास एक मॉडल PointOfContact है जो has_manySystems है। Systems पक्ष से मैं PointOfContact को या तो technical_manager या project_manager (या दोनों) के रूप में पहचानना चाहता हूं। जबकि अभी भी डीबी में PointOfContact 1 बार रखना है।दो संबंधित_to संघों के लिए समान मॉडल

मेरे प्रयास इस प्रकार है:

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

अधिक जानकारी: [लिंक] पर संबंधों के माध्यम से (http://railscasts.com/episodes/163-self-referential-association?view=asciicast) – Zippie

संबंधित मुद्दे