用户我的应用程序检查存在的,如果他们不这样做,它调用这条线:创建!方法投掷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