2011-03-27 9 views
0

프로필 모델이 있고 사용자 has_one 프로필이 있습니다."정의되지 않은 메소드"가 표시되는 이유는 무엇입니까?

NoMethodError in ProfilesController#show 

undefined method `profile' for nil:NilClass 
: 나는 쇼보기에 액세스하려고 할 때

def show 
    @profile = @user.profile 
end 

가 왜이 오류가 않습니다

resources :users 
resources :profiles 

여기 내 컨트롤러 쇼 방법입니다 : 여기

내 경로입니다

답변

1

뭔가를해야합니다. 당신은 아마 이런 식으로 뭔가를하고 싶지 :

def show 
    @user = User.find(params[:id]) 
    @profile = @user.profile 
end 

은 설명 보링 : 기본적으로 인스턴스 변수 (전면 @와 사람)이다 nil을. 그것들은 0이 아닌 값을 할당함으로써 사실상 "인스턴스화"될 수 있습니다. 여기서 @user은 인스턴스 변수이며 아무 것도 지정되지 않았기 때문에 nil을 가리 킵니다. profilenil 컨텍스트에서 호출되며 profile 메서드가 없으므로 no 메서드 예외가 발생합니다. 이것은 로컬 변수와 반대되는데,이 경우에는 예외가 발견되지 않는 지역 변수를 발생시키는 소문자로 시작합니다.

+0

지금 내가이 오류 얻을 : ...'#이 는 ID = 2' –

+0

하하와 사용자를 찾을 수 없습니다 보여 액티브 :: RecordNotFound ProfilesController에 정확히 사용자가 존재하지 않기 때문입니다 같은 대답 – Shiv

+0

확인, 다른 ID를 전달하려고 시도하면 사용자가 종료하지 않습니다. – Shiv

0

@user 개체가 nil이기 때문에? 인스턴스 변수를 사용하기 전에 @user을 채 웁니까? @user이 전무하기 때문에입니다

0

, 당신은 당신은 @user 인스턴스 변수를 초기화해야이

def show 
    @user = User.find(params[:id]) 
    @profile = @user.profile 
end 
관련 문제