在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,我不确定这是一个错误,还是我错过了一些简单的东西。
谢谢,
答案 0 :(得分:2)
在Rails 4中,所有属性都默认为大量分配,因此您不需要使用attr_accesible。现在你必须说明你想保护哪些。你会这样写的
attr_protected :admin
当password_digest为空时,会出现错误。它可能与你的attr_accesor有关:我可以看到你的观点吗?
答案 1 :(得分: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
答案 2 :(得分:1)
我遇到了同样的问题,但这部分解决了我的问题。无法存储 password_confirmation ,因为它不是许可参数
def user_params
params.require(:user).permit(:name, :password_digest, :password, :password_confirmation)
end