2014-03-27 3 views
0

내 응용 프로그램 검사는 기존과 그렇지 않은 경우,이 라인 호출 오류를 던지고 어떤 이유로 만들기! 사용자에 대한 방법을 던지고 nomethoderror

p = Player.create!(uid: id, nick: session[:current_user][:nick], profile_complete: false)

:

undefined method `[]' for nil:NilClass 

누구가가를 왜 어떤 생각?

+1

게시 된 답변에 행운이 있습니까? – zeantsoi

+0

예. 방금 적절한 것을 선택했습니다. – Nick

답변

1

를 호출하기 전에 CURRENT_USER가 존재하는지 확인해야합니다, 다음 session[:current_user][:nick]이 존재합니다

레일에
if session[:current_user] 
    if session[:current_user][:nick] 
    p = Player.create!(uid: id, nick: session[:current_user][:nick], profile_complete: false) 
    end 
end 
+0

이것은 내가 생각하는 대답이다. –

1

이 원인은 다음과 같습니다. session[:current_user][:nick],이 순간에 세션 또는 current_user가없는 것을 의미합니다.

당신은 당신은 조건부 순차적 여부 session[:current_user]을 확인하여이 예외를 처리 할 수 ​​.create!

if session[:current_user] && (nick = session[:current_user][:nick]) 
    p = Player.create!(uid: id, nick: nick, profile_complete: false) 
end 
+0

'session [: current_user]'가 nil 인 경우,'&&'의 두 번째 조건은 평가되지 않으므로 코드는 예상대로 작동합니다. –

+0

문제 없습니다. 사실,이 한 줄 조건을 사용하면 두 개의 if가 해독되는 것이 더 읽기 쉽습니다. –

0

당신은 또한 사용할 수 있습니다 방법 try

p = Player.create! uid: id, nick: session[:current_user].try(:[], :nick), profile_complete: false