nil的未定义方法`user':NilClass

时间:2013-03-13 10:55:33

标签: ruby-on-rails ruby-on-rails-3 associations

在我的模型电子邮件令牌中我有

def self.token_valid(token, type)
   return unless token.present?
   token = EmailToken.where("token = ? and verification_type = ? and confirmed = 'false' and created_at <= ?", token, type, EmailToken.expires).includes(:user).first
   user = token.user
 end

我从我的控制器中调用此方法

def confirm_password_reset
    @user = EmailToken.token_valid(params[:pass_reset],"password")
    render 'reset_password' if @user
end

这些条件是有效的,因为我已经测试了它而没有尝试将它与用户关联,而且它有效。我要做的是获取token_valid方法来确认令牌并返回令牌及其关联用户。 belongs_tohas_many del也已定义 Current error : undefined method user for nil:NilClass
感谢。

2 个答案:

答案 0 :(得分:2)

最好的方法是让你的模型返回令牌,然后在你的reset_password视图中检查@user obj

<%= @user.inspect %>

我的猜测是它返回并清空数组。如果你正在使用sqlite,你可能想读这个 ref doc关于sqlite中的布尔数据类型。因此,您可能希望将已确认的字段更改为0表示false,将1表示为true。

token = EmailToken.where("token = ? and verification_type = ? and confirmed = 0 and created_at <= ?", token, type, EmailToken.expires).includes(:user).first

如果没有,请检查表格中的拼写错误。

答案 1 :(得分:1)

这一行:

 token = EmailToken.where("token = ? and verification_type = ? and confirmed = 'false' and created_at <= ?", token, type, EmailToken.expires).includes(:user).first

返回nil。