2014-03-27 56 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