2013-06-20 2 views
0

Я пытаюсь внедрить систему аутентификации пользователей внутри направляющих, это моя модель:Рельсы ноль значение при сохранении в базе данных

class User < ActiveRecord::Base 
    attr_accessible :id, :email, :name, :password, :created_at, :updated_at 
    has_secure_password 

    before_save { email.downcase! } 

    validates :email, presence: true, :uniqueness => { :case_senstive => false } 

    validates :name, presence: true 

    validates :password, presence: true, length: { minimum: 6 } 
end 

Запуск в консоли я могу прочитать таблицу User успешно, то когда я пытаюсь создать запись:

User.new(:name => "A", :email => "[email protected]", :password => "password") 

работает valid на нем retrurns true, но при сохранении записи, я получаю ошибку:

users.password may not be NULL 

Извлечение password из hash отлично работает.

В чем проблема?

Благодаря

ответ

0

Где вы настройки :password_confirmation? Пример в документах подсказывает, что вам это нужно.

http://api.rubyonrails.org/classes/ActiveModel/SecurePassword/ClassMethods.html

+0

я считаю, что ': password_confirmation' не является обязательным в последних версиях – Wahtever

+0

нет. это поле требуется. Но если вам это не нужно в вашей форме, вы можете установить это поле в контроллере перед сохранением: 'user.password_confirmation = user.password' –

0

Главная проблема заключается в has_secure_password. Если вы используете это, у вас должно быть поле string :password_digest (там будет сохранен ваш зашифрованный пароль). И вам нужно удалить поле :password и ваш валидатор присутствия для этого тоже. После добавления gem 'bcrypt-ruby', '~> 3.0.0'. И теперь, когда должен работать

user = User.new(:name => "A", :email => "[email protected]", 
       :password => "password", :password_confirmation => "password") 

Но лучше использовать большой камень https://github.com/plataformatec/devise. В нем есть все, что вам нужно.

NEW ДОБАВЛЕНО

вы должны attr_accessible для :password_confirmation тоже, и что поле должно быть использовано в вашей форме.

more info about has_secure_password

+0

У меня есть' password_digest' и установлен 'bcrypt' gem. Я не могу использовать проект для проекта – Wahtever