3

나는 다음과 같은 모델을 가지고 말 :Rails3에서 has_one 연관을 통해 자녀의 부모를 찾으려면 어떻게합니까?

class Parent < ActiveRecord::Base 
    has_one :child 
end 

class Child < ActiveRecord::Base 
    belongs_to :parent 
end 
내가 아이를 통해 부모를 가져 오지 좋아하지만, 다음을 수행하면 실패 할 것

: 는 내가 컨트롤러를 통해 다음과 같은 방법으로 모델을 찾을

@child = Child.find(params[:child_id]) 

이 같은 아이의 부모를 검색하고 싶습니다, 내보기에

(이 관련이 있습니다,하지만 난 얕은 라우팅을 사용하고 있기 때문에, PARENT_ID URL에 사용할 수없는 경우 확실하지 않음) :

@child.parent 

어떻게하면됩니까?

감사합니다.


업데이트 : 내 사례 (새 앱을 시작하고 생성하기로 결정했을 때)가 실제로 완벽하게 실행되었습니다. 실제 앱에서는 belongs_to :parent을 자녀 모델에 포함하는 것을 잊었습니다. 얼마나 어리석은 짓이야. 시간을내어 의견을 말하고 답변 해 주셔서 감사합니다. 다음 번에는 질문을 게시하기 전에 더 자세히 살펴 보겠습니다.

+1

'@ child.parent'가 작동해야합니다. 뭐가 문제 야? – Zabba

+0

문제는 제가 충분히 자세히보고 있지 않다는 것입니다. 업데이트를 참조하십시오. –

답변

9

정확히 그렇게하는 방법입니다.

사실 작동하지 않는다는 사실은 @child이 부모를 갖지 못하게하는 근본적인 문제를 제시합니다.

먼저 Child의 테이블에 외래 키가 있는지 확인하십시오. 외래 키 열 (이 경우 parent_id)은 항상 belongs_to 연관이있는 모델에 있어야합니다.

두 번째로, 가져 오는 자식이 실제로 부모인지 확인하십시오. 이것은 외래 키 (parent_id)가 nil이 아니어야 함을 의미합니다. 숫자 값이 있으면 Parent의 테이블에 foreign_key와 동일한 값을 가진 레코드가 Child에 있는지 확인하십시오.

또한 응용 프로그램 디렉토리의 레일 콘솔 (rails console)을 사용하여 연관성을 재확인 할 수 있습니다. Child.first.parent을 수행하고 진행 상황을 확인하십시오. 물론 Parent.first.child 또는 Child.find(123).parent과 같은 유사 콘텐츠를 사용할 수도 있지만 params은 사용할 수 없습니다.

관련 문제