Как исключить поля пароля из проверки при обновлении записи? (Rails 3.0.4, Ruby 1.9.2) - PullRequest
5 голосов
/ 07 апреля 2011

У меня есть форма, которая позволяет обновлять запись пользователя. Он содержит поля для: password и: password_confirmation, но я не хочу, чтобы проверка выполнялась на них, если зашифрованный пароль уже сохранен в базе данных.

Поля из файла просмотра:

<%= f.password_field :password %>
<%= f.password_field :password_confirmation, :label => 'Confirm Password' %>

При поиске в Интернете я нашел этот фрагмент кода, который, как я полагаю, был для предыдущей версии Ruby / Rails. (Который я бы поместил в мою модель пользователя.)

validates_presence_of :password, :on => create

Поскольку синтаксис для проверки моего пароля в моей пользовательской модели отличается (см. Ниже), я запутался в синтаксисе, который мне понадобится.

validates :password, :presence => true, :confirmation => true

Я искал другие сообщения и наверняка мог использовать какое-то направление.

- Отказ от ответственности - я видел, что есть скриншот об условных проверках, но в данный момент я не могу его просмотреть.

Спасибо, все.

Изменить - вставлен следующий код, и он разрешает обновление записи пользователя, не жалуясь на пропущенное поле пароля.

validates :password, :presence => true, :confirmation => true, :on => :create

Ответы [ 2 ]

8 голосов
/ 07 апреля 2011

Я бы порекомендовал сделать следующее:

validates :password,
  :presence => true,
  :confirmation => true,
  :if => lambda{ new_record? || !password.nil? }

Это в основном говорит о том, что пароль должен быть подтвержден при создании с помощью password_confirmation и что он также должен быть подтвержден, когда пароль не равен nil - например, когдапользователь обновляет свой пароль.

5 голосов
/ 07 апреля 2011
validates :password, :presence => true, :confirmation => true, :on => :create

Подробнее о направляющих: http://edgeguides.rubyonrails.org/active_record_validations_callbacks.html#on

...