2013-11-23 3 views
0

У меня есть следующие два простых классов:Попытка смоделировать отношения между двумя людьми в рельсах

class Person < ActiveRecord::Base 
    has_many :parent_child_assignments 

    has_many :children, :through => :parent_child_assignments 
    has_many :parents, :through => :parent_child_assignments 
end 

class ParentChildAssignment < ActiveRecord::Base 
    belongs_to :parent, :class_name => "Person" 
    belongs_to :child, :class_name => "Person" 
end 

создан из следующих команд рельсам

rails generate model Person name:string 
rails generate model ParentChildAssignment parent_id:integer child_id:integer 

я могу получить одно направление (joe.children или joe.parents) для работы, но не оба

Кому-то, возможно, раньше задавали этот вопрос, но я не могу его найти.

Заранее спасибо.

+0

Я думаю, вам нужно указать внешний ключ в имеет много части. Например: 'has_many: children,: through =>: parent_child_assignments, class_name: 'Person', foreign_key:: child_id – Max

ответ

0

классы должны выглядеть следующим образом:

class Person < ActiveRecord::Base 
    has_many :parent_child_assignments_as_parent, class_name: 'ParentChildAssignment', :foreign_key => :parent_id 
    has_many :parent_child_assignments_as_child, class_name: 'ParentChildAssignment', :foreign_key => :child_id 

    has_many :children, :through => :parent_child_assignments_as_parent 
    has_many :parents, :through => :parent_child_assignments_as_child 
end 

class ParentChildAssignment < ActiveRecord::Base 
    belongs_to :parent, :class_name => "Person", :foreign_key => :parent_id 
    belongs_to :child, :class_name => "Person", :foreign_key => :child_id 
end 
+0

Ответ был фактически предоставлен мне офлайн другом. –

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