Las relaciones declaradas en Couple
debería tener este aspecto:
class Couple
named_scope :with_people, { :include => [:first_person, :second_person] }
belongs_to :first_person, :class_name => 'Person'
belongs_to :second_person, :class_name => 'Person'
end
#usage:
Couple.with_people.first
# => <Couple ... @first_person: <Person ...>, @second_person: <Person ...>>
Los que están en Person
dependen de si un Person
puede ser parte de más de un Couple
. Si un Person
sólo puede pertenecer a uno Couple
y no puede ser el "primero" Person
en uno y el Second
en otro, es posible que desee:
class Person
has_one :couple_as_first_person, :foreign_key => 'first_person_id', :class_name => 'Couple'
has_one :couple_as_second_person, :foreign_key => 'second_person_id', :class_name => 'Couple'
def couple
couple_as_first_person || couple_as_second_person
end
end
si un Person
puede pertenecer a varios Couple
s, y no hay no hay manera de saber si ellos son la "primera" o "segundo" en cualquier dada Couple
, es posible que desee:
class Person
has_many :couples_as_first_person, :foreign_key => 'first_person_id', :class_name => 'Couple'
has_many :couples_as_second_person, :foreign_key => 'second_person_id', :class_name => 'Couple'
def couples
couples_as_first_person + couples_as_second_person
end
end
Si está utilizando rieles, ¿por qué la clave principal en el modelo de persona ser "person_id "y no solo" id "? – tfwright
Cambié los nombres de mis modelos para esta publicación porque me gustaría mantener los nombres fuera de internet. Debería ser 'id' pero eso no es una solución difícil. Solo usa 'set_primary_key'. – user94154