错误登录Rails 3“SessionsController中的NameError #create”

时间:2012-07-18 15:32:56

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

我正在尝试使用has_secure_password进行示例登录。添加了gem文件,但此错误仍然存​​在:

undefined local variable or method `password_digest' for #<User:0x23129a0>
app/controllers/sessions_controller.rb:8:in `create'

在此档案中

sessions_controller.rb

第8行看起来像这样:

if user and user.authenticate(params[:password])

class SessionsController < ApplicationController
  def new

  end

  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 , notice: "Login efetuado com sucesso."
     else
       flash[:notice] = 'Usuario ou senha errados'
       redirect_to login_url
    end
  end

  def destroy
    session[:user_id] = nil
    redirect_to login_url, notice: "Logout Efetuado com sucesso."
  end
end

1 个答案:

答案 0 :(得分:0)

我同意贝拉的观点,认为这是重复的。但是,如果原始答案不够明确,这里有逐步说明。

password_digest添加到您的用户模型...

在控制台中执行:

$ rails generate migration AddPasswordDigestToUsers

这将创建一个类似于/db/migrate/20120419234606_add_password_digest_to_users的文件(文件开头的十四个数字将与我的不同,因为它基本上是您运行generate命令时的时间戳。您可以阅读更多信息生成独立迁移here。)

打开刚刚创建的迁移文件并进行编辑,使其看起来像这样:

class AddPasswordDigestToUsers < ActiveRecord::Migration
  def change
    add_column :users, :password_digest, :string
  end
end

保存并关闭文件。然后,在控制台中,运行:

$ bundle exec rake db:migrate
$ bundle exec rake db:test:prepare

此时,您的用户模型应该具有password_digest属性,并且(希望)您不会再出现错误。