ruby-on-rails – 无法弄清楚这个rails错误:未定义的方法`remem
发布时间:2020-12-17 02:23:13 所属栏目:百科 来源:网络整理
导读:我按照Michael Hartl的教程为我的应用程序提供了一个身份验证系统,但我一直得到这个remember_token方法错误: undefined method `remember_token=' for #User:0x00000005e44238 我不明白为什么remember_token是未定义的,因为Hartl的教程说它是由我相信的记忆
我按照Michael Hartl的教程为我的应用程序提供了一个身份验证系统,但我一直得到这个remember_token方法错误:
undefined method `remember_token=' for #<User:0x00000005e44238> 我不明白为什么remember_token是未定义的,因为Hartl的教程说它是由我相信的记忆方法自动生成的. 这是应用程序跟踪: app/models/user.rb:23:in `remember' app/helpers/sessions_helper.rb:10:in `remember' app/controllers/sessions_controller.rb:11:in `create' 相关用户.rb: def User.digest(string) cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost BCrypt::Password.create(string,cost: cost) end def User.new_token SecureRandom.urlsafe_base64 end def remember self.remember_token = User.new_token update_attribute(:remember_digest,User.digest(remember_token)) end 会话控制器: class SessionsController < ApplicationController def new end def create user = User.find_by(email: params[:session][:email].downcase) if user && user.authenticate(params[:session][:password]) log_in user params[:session][:remember_me] == '1' ? remember(user) : forget(user) remember user redirect_back_or user else # Create an error message. flash.now[:danger] = 'Invalid email/password combination' # Not quite right! render 'new' end end def destroy forget(current_user) session.delete(:user_id) @current_user = nil redirect_to root_url end end 相关会议助手: def remember(user) user.remember cookies.permanent.signed[:user_id] = user.id cookies.permanent[:remember_token] = user.remember_token end def forget(user) user.forget cookies.delete(:user_id) cookies.delete(:remember_token) end # Returns the current logged-in user (if any). def current_user if (user_id = session[:user_id]) @current_user ||= User.find_by(id: user_id) elsif (user_id = cookies.signed[:user_id]) user = User.find_by(id: user_id) if user && user.authenticated?(cookies[:remember_token]) log_in user @current_user = user end end end 解决方法
我猜你跳过了必须在你的数据库中添加一个新列remember_token的部分(参见:
https://www.railstutorial.org/book/sign_in_out#cha-sign_in_sign_out上的清单8.16)
如果您执行了该步骤,则需要迁移数据库并重新启动服务器: $bundle exec rake db:migrate $touch tmp/restart.txt (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |