Rails 3: клиентские валидации gem и devise password validations
У меня есть драгоценный камень client_side_validations, который отлично работает над моими формами. Я использую Devise для своей модели пользователей, и когда я иду в форму edit_user_registration, проверки выдаются для всего, кроме полей :current_password,: password и: password_confirmation.
Fort instance - я оставляю электронное письмо пустым,проверка появляется сразу, когда я выхожу из поля. Однако, если я оставлю поле current_password пустым и вкладка из него ничего не произойдет, то когда я отправляю форму, я получаю сообщение об ошибке "1 ошибка запрещает сохранение этого пользователя: пароль не может быть пустым"
Спасибо за помощь
3 ответов
В настоящее время ClientSideValidations отфильтрует любые условные валидаторы. Devise устанавливает некоторые из валидаторов как условные: https://github.com/plataformatec/devise/blob/master/lib/devise/models/validatable.rb#L24-32
причина, по которой я это сделал, заключается в том, что для клиента нет хорошего способа определить истинное значение этого условия. Я мог бы сделать это во время создания формы, но что, если это условие полагается на значение, которое можно изменить на бланке? Поэтому я решил отфильтровать их и позволить вещам вернуться на сервер.
это была идея, но ясно, что она наложила несправедливые ограничения на некоторые вещи. Это самое очевидное (и популярное).
поэтому я планирую выпустить новую версию очень скоро, которая позволит вам явно переопределить условные фильтры. Он будет работать следующим образом:
<%= f.text_field :password, :validate => { :presence => true, :confirmation => true } %>
или
<%= f.text_field :password, :validate => true %>
в первом случае вы можете выбрать, какие валидаторы, чтобы включить фильтр выключен. Во 2-м случае он отключит фильтр для всех валидаторов этого атрибута. Условие будет оценено во время создания формы, и если оно пройдет, оно добавит валидатор к элементу ввода для использования на клиенте.
master-ветке теперь поддерживает этот формат. Укажите свой Gemfile на него, и вы должны быть хорошими
Это просто! Драгоценный камень расширяет Rails по умолчанию Form builder, и все, что вам нужно сделать, это установить параметр :validate => true на любом теге form_for (или simple_form_for для простых пользователей формы), для которого вы хотите встроенные проверки. Построитель форм использует некоторые отражения rails в проверках модели для создания некоторого json, который включается в тег сценария после Формы. Затем JSON используется платформой Javascript gem для выполнения проверок, которые должны быть выполненный.
<%= form_for(@user, :url => registration_path(resource_name), :validate => true) do |f| %>