relacji zgłoszone Couple
powinna wyglądać następująco:
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 ...>>
Ci w Person
zależeć od tego, czy Person
może być częścią więcej niż jednego Couple
. Jeśli Person
może należeć tylko do jednej Couple
i nie może być „pierwszym” Person
na jednym i tym Second
na innym, może chcesz:
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
Jeśli Person
może należeć do kilku Couple
s, a tam nie sposób stwierdzić, czy są one „pierwszy” i „drugi” w danym Couple
, możesz:
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
Jeśli używasz szyny, dlaczego kluczem podstawowym modelu Person być „person_id "a nie tylko" id "? – tfwright
Zmieniłem nazwy moich modeli dla tego posta, ponieważ chciałbym, aby ich nazwy nie były dostępne w Internecie. Powinien to być "id", ale nie jest to trudna naprawa. Po prostu użyj 'set_primary_key'. – user94154