2011-01-07 2 views
1

여기에 혼란스러운 문제가 있습니다. has_one 관계를 가진 두 개의 모델이 있습니다. fields_for를 사용하여 자식 인스턴스를 만드는 양식이 있습니다. 그러나, 내가 시도하고 자식 모델에서 부모에 액세스 할 때 그것은 단지 없음을 가져옵니다.has_one을 통해 자녀의 부모에게 접속할 수 없음

You have a nil object when you didn't expect it! 
The error occurred while evaluating nil.name 

왜 관계가 반환되는 경우 : parent.name.equals?("mum") 오류가 반환됩니다

class Parent 
    has_one :child 
    accepts_nested_attributes_for :child 
    attr_accessible :child_attributes 
end 

class Child 
    belongs_to :parent 
    validate :parent_is_called_mum 

    def parent_is_called_mum 
    parent.name.equals?("mum") 
    end 
end 

문제 :

나는 아래 문제의 간결하고 간단한 예제를 제공하기 위해 노력했습니다 없으니?

+0

"부모"는 "부모"로 대문자로 표기해야합니까? –

+0

클래스 수준에있을 것이라고 생각하고 자식과 관련된 클래스의 인스턴스에 액세스하려고합니다. – amaseuk

+0

아, 그래, 네가 맞다고 생각해. =) –

답변

1

는 잘 모르겠지만, 암시 할 수있다 self.parent.name.equals?("mum")

자기와 시도, 그래서 이것은 당신의 솔루션을하지 않을 수 있습니다.

편집 : 데이터베이스에서, 당신은 childs 테이블의 열 parent_id가 null이 아닌 확신? 그렇다면 self.parent가 null을 반환하는 것이 정상입니다. 아니, 내 말은. 하위 모델

has_one :child, :inverse_of => :parent 

: 상위 모델

: 협회의 각 측면에 inverse_of 특성 추가

+0

불행히도 차이가 없습니다 – amaseuk

+0

NOT NULL로 설정되어 있지 않습니다 - 이건 정말 차이가 있습니까? 그런데 – amaseuk

+0

은 attr_accessible : child_attributes 행을 제거했으며 잘못된 구문을 사용합니까? – amaseuk

관련 문제