Обновление профиля без обновления пароля

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

Мои текущие проверки:

  validates :password, presence: true, length: { minimum: 8 }
  validates :password_confirm, presence: true

как я могу сделать это условным? Было бы разумно требовать эти проверки только в том случае, если атрибуты password и password_confirm были в параметрах. Я мог бы использовать некоторую идею о том, как этого добиться. Спасибо.


person Mike Simmons    schedule 18.11.2012    source источник
comment
Если я правильно вас понял, вы хотите проверить password_confirm только в том случае, если password изменилось, верно? Не имеет значения, подтверждаете ли вы, что пароль присутствует, когда пользователь редактирует другой атрибут, поскольку пароль будет присутствовать в записи (в отличие от password_confirm, который, как я предполагаю, является attr_accessor).   -  person Chris Salzberg    schedule 19.11.2012


Ответы (1)


Я думаю, что это должно сделать это:

validates :password, presence: true, length: { minimum: 8 }
validates :password_confirm, presence: true, :if => Proc.new { |a| a.password_changed? || a.new_record? }

Дополнительные сведения о методах _changed? см. в документации по адресу ActiveModel::Dirty. Не должно быть проблем с запуском проверки присутствия на password каждый раз, когда вы меняете атрибут, поскольку он будет сохраняться в БД, поэтому он всегда будет проходить (тогда как password_confirm не будет сохраняться и, следовательно, требует условного выражения).

person Chris Salzberg    schedule 18.11.2012