Проверка Rails "не удается при успехе" - PullRequest
0 голосов
/ 01 апреля 2010

У меня есть это в моем user.rb:

 attr_accessor :old_password 
  def validate
    unless password.nil?
      errors.add_to_base("Old password entered incorrect")  unless self.valid_password? old_password 
    end
   end

У меня есть old_password как виртуальный атрибут, который должен быть проверен на соответствие текущему перед обновлением до нового пароля. Моя проблема в том, что после правильного ввода (пароль == подтверждение пароля и self.valid_password? Old_password) ошибка выдаст и вернет меня обратно в форму. Странная часть заключается в том, что данные будут фактически обновляться в базе данных, и это не будет при неправильном вводе; хотя это приведет к той же самой ошибке («Старый пароль введен неверно»). Что, черт возьми, я делаю не так?

1 Ответ

0 голосов
/ 01 апреля 2010

Хорошо, нашел проблему. Я использовал пользовательские атрибуты обновления, которые раньше выглядели так:

def custom_update_attributes(userparams, updater)
     unless updater.may_change_user_role_name? self
       userparams.delete(:role_name)
       userparams.delete(:active)
     end
     self.update_attributes(userparams)
     save
   end

Очевидная проблема здесь - сохранение, хотя я изменил свой def validate на def validate_on_update, эта проверка также выполнялась для действия сохранения, и, поскольку не задано old_password, ошибка будет возвращена.

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