3

在 Rails 4 应用程序中——尝试在控制台中创建简单用户时出现此错误。

RuntimeError:
   Password digest missing on new record

我的模型、控制器和架构如下所示:

class User < ActiveRecord::Base # User.rb
  has_secure_password
end

class UsersController < ApplicationController 

  def new
    @user = User.new
  end

 def create
   @user = User.new(user_params)
     if @user.save
       redirect_to root_path, notice: "Thank you for signing up!"
     else
      render "new"
    end
  end

private

  def user_params
    params.require(:user).permit(:email, :name, :password, :password_confirmation)
  end
end

create_table "users", force: true do |t| #db/schema.rb (edited for brevity)
  t.string   "email"
  t.string   "name"
  t.text     "password_digest"
  t.datetime "created_at"
  t.datetime "updated_at"
end

我正在使用 postgresql,不确定这是否是一个错误,或者我是否错过了一些简单的事情。

谢谢,

4

3 回答 3

2

在 Rails 4 中,默认情况下所有属性都是批量分配的,因此您不需要使用 attr_accesible。现在你必须说明你想保护哪些。你会这样写

attr_protected :admin

当 password_digest 为空时,会引发您遇到的错误。它可能与您的 attr_accesor: 有关。我可以看看你的看法吗?

于 2013-03-13T04:42:16.493 回答
1

我在rails 4中做到了:

要使用“has_secure_password”,您必须使用参数password_digest

Schema Information = name :string, password_digest :string

class User < ActiveRecord::Base
     has_secure_password
     validates :name, presence: true, uniqueness: true
     validates_presence_of :password, :on => :create
end

和控制器

def user_params
   params.require(:user).permit(:name, :password_digest, 
   :password,  :password_confirmation)
end

def create
    @user = User.new(user_params)
    respond_to do |format|
      if @user.save
        format.html { redirect_to users_url, notice: "User #{@user.name} was successfully created.'"}
        format.json { render action: 'show', status: :created, location: @user }
      else
        format.html { render action: 'new' }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
end
于 2013-11-22T13:21:59.847 回答
1

我有完全相同的问题,但这里的那部分解决了我的问题。无法存储password_confirmation,因为它不是允许参数

def user_params params.require(:user).permit(:name, :password_digest, :password, :password_confirmation) end

于 2014-07-10T00:40:04.357 回答