在我的模型电子邮件令牌中我有
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_to
和has_many
del也已定义
Current error : undefined method user for nil:NilClass
感谢。
答案 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。