2010-12-03 8 views
3

두 가지 모델을 레일즈 3 앱에서 두 가지 방식으로 연결하려고합니다. 사람들은 많은 애완 동물을 가지고 있으며 각 사람은 좋아하는 애완 동물을 가질 수 있습니다.두 모델 간의 다중 연결이

올바른 연관과 외래 키를 사용하고 있습니까?

사용할 필요가 (당신이 예상대로)는 사람 테이블에 favorite_pet_id을 가지고있는 것처럼 보이는 때문에 내가

class Person < ActiveRecord::Base 
    has_many :pets # pets table has a person_id 
    has_one :favorite_pet, :class_name => 'Pet' # persons table has favorite_pet_id 
end 


class Pet < ActiveRecord::Base 
    belongs_to :person # using person_id in pets table 
end 

답변

4

을 person.favorite_pet_id 및 person.favorite_pet.id 않을 때 사실은 두 개의 서로 다른 번호를 얻을 다음과 같이 "has_one"대신 "belongs_to"연결을 사용하십시오.

class Person < ActiveRecord::Base 
    has_many :pets # pets table has a person_id 
    belongs_to :favorite_pet, :class_name => 'Pet' # persons table has favorite_pet_id 
end 


class Pet < ActiveRecord::Base 
    belongs_to :person # using person_id in pets table 
end 

이렇게하면 문제가 해결됩니다. 이게 도움이 되길 바란다!

+0

감사합니다. 정말 바보 같은 질문에 답해 주셔서 감사합니다. 이것은 효과가 있었다. 관계를 설명하는 것처럼 보이지 않기 때문에 "속한"것을 간과했으나 지금은 레일스의 컨텍스트에서 어떻게 수행되는지 봅니다. –

+0

"belongs_to"가 항상 현실 세계에 완벽하게 일치하지는 않는다는 것에 동의합니다. 그것은 99 %의 시간 동안 작동합니다. 어쩌면 애완 동물의 경우, 누가 정리를했는지 기억하는 데 도움이됩니다. :) –

관련 문제