创建!投掷nomethoderror的方法

时间:2014-03-27 20:06:20

标签: ruby-on-rails ruby activerecord

我的应用程序检查用户是否存在,如果不存在,则调用此行:

  

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

由于某种原因导致错误:

undefined method `[]' for nil:NilClass

任何人都知道为什么?

3 个答案:

答案 0 :(得分:1)

这是原因:session[:current_user][:nick],这意味着您此时在会话中没有session或current_user。

在调用.create!

之前,您应该检查current_user是否存在
if session[:current_user] && (nick = session[:current_user][:nick])
  p = Player.create!(uid: id, nick: nick, profile_complete: false)
end

答案 1 :(得分:1)

您可以通过依次检查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

答案 2 :(得分:0)

在Rails中

你也可以使用方法try

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