Как в Ruby on Rails обойти validates?

программирование ruby on rails rails RoR

Используется валидация длины (а соответственно и существования) пароля для формы в Rails. Необходимо в форме регистрации эту валидацию выполнять, а при редактировании данных, если пароль пустой, оставлять тот, что был в БД. Как реализовать?
В Rails я новичок.

Примечание:
Вернее, даже не так... Валидация прописана не для формы, а для модели user.rb.

Примечание:
Alexander Koretsky, примерно такой трюк я уже пробовал, жалуется на незаполненное поле пароля. Плюс к тому, используется проверка поля password_confirmation, то есть пароль нужно вводить 2 раза. Вся проверка сводится к записи в модели user.rb:

validates :password, :confirmation => true,
:length => { :within => 6..40 }

Всю эту штуковину я делал по мануалу http://russian.railstutorial.org.
Вот теперь думаю, как исправить под свои нужды... А нужно, чтобы при регистрации проверка ввода пароля была, а при редактировании данных пользователя была проверка только :confirmation, если пароль не пустой, а если пустой, то просто не изменять его зашифрованное значение в базе. Пробовал делать через except, но строки в модели user.rb все портят, и метод в контроллере работает, но модель его зверски обламывает.

Примечание:
Вопрос решил, о решении отписался здесь: http://otvety.google.ru/otvety/thread?tid=713e0d2637b4cad8

Примечание:
Антон Витальевич, спасибо Вам еще раз за помощь. Прошлый вопрос (в котором Вы и ответили) я создал без назначения баллов, поэтому открывал второй, с баллами) На Вас его и закрою)
Ответы:
Я сам знаю rails на любительском уровне, но попробую ответить.
Похоже, что валидация выполняется при записи в базу. Тогда нужно делать проверку в коде перед записью, в контроллере.
Многое зависит от того, как отправляются данные из формы редактирования. Если используется form_for, то можно загрузить старую запись и обновлять поля по одному, попутно делая необходимые проверки. Например:
@user = User.find(params[:id])
@user.name = params[:user][:name]
@user.login = params[:user][:login]
...............................................................
if (params[:user][:password] != "")
    @user.password = params[:user][:password]
end
.......................................................................
@user.save
http://api.rubyonrails.org/
Configuration options:
:message - A custom error message (default is: “is invalid”)
:on - Specifies when this validation is active (default is :save, other options :create, :update).
:if - Specifies a method, proc or string to call to determine if the validation should occur (e.g. :if => :allow_validation, or :if => Proc.new { |user| user.signup_step > 2 }). The method, proc or string should return or evaluate to a true or false value.
:unless - Specifies a method, proc or string to call to determine if the validation should not occur (e.g. :unless => :skip_validation, or :unless => Proc.new { |user| user.signup_step <= 2 }). The method, proc or string should return or evaluate to a true or false value.


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.