2014-03-27 112 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]有條件地解決這一例外,那麼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。

您應該檢查調用.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]'爲零,則&&'的第二個條件將不被評估,所以代碼按預期工作。 –

+0

沒問題。事實上,擁有兩條if如此的單行條件是更具可讀性的。 –

0
Rails中

你也可以使用方法try

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