0

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

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确认令牌并返回令牌及其关联用户的方法。thebelongs_tohas_manydel 也已定义。
Current error : undefined method user for nil:NilClass
谢谢。

4

2 回答 2

2

解决此问题的最佳方法是让您的模型返回令牌,然后在您的 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

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

于 2013-03-13T19:19:52.250 回答
1

这一行:

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

返回零。

于 2013-03-13T10:58:10.297 回答