使用Rails进行敏捷Web开发第14章

时间:2012-05-15 19:41:33

标签: ruby-on-rails ruby-on-rails-3

我正在按照本书第14章“登录”中的示例进行编写。 我在“127.0.0.1:3000/login”中的视图运行良好,但如果我插入我的用户和密码,则会返回此错误:

SessionsController中的NoMethodError #create

对于#<

未定义的方法`authenticate'用户:0x9f75978>

如何解决?

create方法sessions_controller.rb是:

  def create
    user = User.find_by_name(params[:name])
    if user and user.authenticate(params[:password])
      session[:user_id] = user.id
      redirect_to admin_url
    else
      redirect_to login_url, alert: "Invalid user/password combination"
    end
  end

2 个答案:

答案 0 :(得分:4)

它试图在用户上调用authenticate,这意味着你可能没有用户的身份验证方法。如果你这样做,请确保它不是私密的。

答案 1 :(得分:2)

您提供的代码会尝试在User对象的实例上调用authenticate方法。

基于您评论re:User.authenticate(name, password),您只在用户上拥有验证方法 - 并且它将名称和密码作为参数。

要调用User类方法,您需要使用以下内容:

user = User.find_by_name(params[:name])
if user && User.authenticate(params[:name], params[:password])

或者,查找一个名为authenticate的实例级方法,该方法(如上面提到的@caulfield)看起来像:

def authenticate(password)
  # does stuff
end

而不是User.authenticate(name,password)