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

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

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
谢谢。

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

 <%= @user.inspect %> 

我的猜测是它返回并清空数组。 如果你正在使用sqlite,你可能想在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 

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

这一行:

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

返回零。