определить правильное место для password_required? с шифрованием пароля before_save - PullRequest
0 голосов
/ 03 марта 2012

У меня есть следующая модель, и я пытаюсь отключить проверку пароля для модели User с помощью этой Проверка Rails Предотвращает сохранение

class User < ActiveRecord::Base
  before_save :encrypt_password
  validates :password, :presence => true,
                   :confirmation => true,
                   :length => { :within => 4..12 },
                   :if => :password_required?

  def password_required?        
    self.new_record? or self.password?
  end

  #
  # where we encrypt on creation
  #
  def encrypt_password
    if password.present?
      self.password_salt = BCrypt::Engine.generate_salt
      self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
    end
  end

Я получаю сообщение об ошибке:

undefined method `password?' for #<User:0x007fc8e0473be0>

Должен ли я просто проверить self.password_hash? Есть другая форма для обновления пароля. Какова лучшая стратегия для отключения проверки в этом случае?

ТНХ

1 Ответ

1 голос
/ 03 марта 2012

Вы должны добавить это к вашей модели пользователя:

attr_accessor :password

Это даст вашей модели пользователя атрибут пароля - однако он не сохраняется в базе данных или запоминается в вашем приложении каким-либо образом.Хранятся только соль и хеш.

Чтобы получить пароль?и в вашей модели сделайте следующее:

attr_accessor :password
alias :password? :password

Вы можете использовать password? как пустое булево поле: если оно что-то возвращает, тогда пароль установлен.В противном случае пароль не был установлен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...