Ruby on rails 3 密码重置控制器中的参数错误

Ruby on rails 3 密码重置控制器中的参数错误,ruby-on-rails-3,Ruby On Rails 3,我正在按照中的教程创建“忘记密码”链接。我在为密码重置创建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_

我正在按照中的教程创建“忘记密码”链接。我在为密码重置创建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行是
记住\u令牌(:密码\u重置\u令牌)

../app/controllers/password\u resets\u 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

如果我将在控制器中查找用户的方式更改为:
user=user.find_by_email(params[:session][:email])
第一个错误消失。我只能认为这是在告诉我,我给用户打错了电话,没有在重置时将新令牌分配给它

看看Railscast,其中有“记住令牌”方法,它们使用添加到用户类的“生成令牌”方法。当然,这种类型的输入错误可能不是问题所在,但如果是,则错误消息是有意义的(以前不存在的方法不需要任何参数)。

我知道我对令牌分配感到完全困惑。我以前开发了一种创建cookie的方法,并希望继续使用相同的方法,但我想我在尝试合并这两种方法时遇到了困难。我已经更新了我的user.rb以包含这些信息,并且还添加了我的助手。我看不到您在哪里定义了remember_标记方法。您有一个名为create\u memore\u token的方法,它创建一个名为memore\u token的类变量。在我看来,当你调用“memory_token(:password_reset_token)”时,你会得到一个错误,因为“memory_token”是一个类变量(不应该有参数),但你传递给它的参数就好像它是你的create_memory_token方法一样。Steve,你是对的。我已经更新了代码来调用
create\u memored\u token(:password\u reset\u token)
,并在创建{create\u memored\u token(:memored\u token)}之前添加到user.rb文件
。我仍然收到3个错误。教程中此函数的版本采用了一个参数(表示要检查的列名),因此它可以确保令牌值是唯一的。它还使用该参数确定在哪一列中保存标记值。在您的方法版本中,您不传递参数,而是自动将其保存在“记住”标记列中。您之所以会收到错误,是因为您正在将参数传递给
create\u memory\u token
,但它不需要参数。您需要修改该方法以获取参数,这样它就知道应该在哪个列中保存生成的令牌……而这正是我缺乏经验给我带来麻烦的地方。创建参数似乎可以清除密码重置,但这会给我的注册表单带来很大的问题。给我更多的研究和阅读!我知道每个人在学习的时候都在这里,但是男孩,这可能会令人沮丧!史蒂夫,谢谢你的帮助!
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
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