2013-03-13 2 views
3

В приложении Rails 4 - я получаю эту ошибку при попытке создать простого пользователя на моей консоли.Rails 4 has_secure_password

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

разрешения вы установите Bcrypt камень? –

+0

это не получилось бы без bcrypt –

ответ

2

В Rails 4 все атрибуты масса назначается по умолчанию, так что вам не нужно использовать attr_accesible. Теперь вы должны указать, какие из них вы хотите защитить. вы напишете вот так:

attr_protected :admin 

Ошибка, которую вы получаете, поднимается, когда пароль_digest пуст. Вероятно, это связано с вашим attr_accesor :. Могу ли я увидеть ваше мнение?

+0

Спасибо, это как-то связано с 'attr_accessor'. Как только я удалил все, все работало нормально. – trev9065

1

Я сделал это в рельсов 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 
1

я имел точно такая же проблема, но эта часть здесь решила мою проблему. password_confirmation не может быть сохранен, поскольку он не был параметром

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