用戶我的應用程序檢查存在的,如果他們不這樣做,它調用這條線:創建!方法投擲nomethoderror
p = Player.create!(uid: id, nick: session[:current_user][:nick], profile_complete: false)
由於某種原因被拋出一個錯誤:
undefined method `[]' for nil:NilClass
人有任何想法爲什麼?
用戶我的應用程序檢查存在的,如果他們不這樣做,它調用這條線:創建!方法投擲nomethoderror
p = Player.create!(uid: id, nick: session[:current_user][:nick], profile_complete: false)
由於某種原因被拋出一個錯誤:
undefined method `[]' for nil:NilClass
人有任何想法爲什麼?
之前的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
這是我想的答案 –
這是原因: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
如果'session [:current_user]'爲零,則&&'的第二個條件將不被評估,所以代碼按預期工作。 –
沒問題。事實上,擁有兩條if如此的單行條件是更具可讀性的。 –
你也可以使用方法try
p = Player.create! uid: id, nick: session[:current_user].try(:[], :nick), profile_complete: false
發佈的答案有什麼好運? – zeantsoi
是的。只需選擇適當的一個。 – Nick