我正在按照Railscast中的教程创建“忘记密码”链接。我在为密码重置创建cookie时遇到了问题。这是错误:
ArgumentError in PasswordResetsController#create
wrong number of arguments (1 for 0)
Rails.root: C:/Sites/application
Application Trace | Framework Trace | Full Trace
app/models/user.rb:37:in `create_remember_token'
app/models/user.rb:29:in `send_password_reset'
app/controllers/password_resets_controller.rb:7:in `create'
../ app / models / user.rb - 第28行是remember_token(:password_reset_token)
before_save :create_remember_token
before_create { create_remember_token(:remember_token) }
def send_password_reset
create_remember_token(:password_reset_token)
save!
UserMailer.password_reset(self).deliver
end
private
def create_remember_token
self.remember_token = SecureRandom.urlsafe_base64
end
../应用程序/控制器/ password_resets_controller.rb
class PasswordResetsController < ApplicationController
def new
end
def create
user = User.find_by_email(params[:email])
user.send_password_reset if user
redirect_to root_url, :notice => "Email sent with password reset instructions."
end
def edit
@user = User.find_by_password_reset_token!(params[:id])
end
end
../应用程序/助手/ sessions_helper.rb
def sign_in(user)
cookies.permanent[:remember_token] = user.remember_token
current_user = user
end
def current_user
@current_user ||= user_from_remember_token
end
def sign_out
current_user = nil
cookies.delete(:remember_token)
end
private
def user_from_remember_token
remember_token = cookies[:remember_token]
User.find_by_remember_token(remember_token) unless remember_token.nil?
end
end
如果我改变我在控制器中找到用户的方式:user = User.find_by_email(params[:session][:email])
第一个错误消失。我只能认为这告诉我,我正在错误地调用用户,并且在重置时没有为其分配新令牌。
答案 0 :(得分:1)
只要查看Railscast,你有“remember_token”方法,就会使用添加到User类的“generate_token”方法。当然,这种拼写错误可能不是问题,但如果错误信息是有意义的(以前不存在的方法就不会指望任何参数)。