Список вопросов
Как зайти в Даркнет?!
25th January, 01:11
5
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
893
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Ruby on Rails 3 validation model
Просмотров: 254
 
Ответов: 5
Предположим у нас есть User модель и в ней есть first_name, last_name, email поля. Все они обязательные. Соотвественно в модели мы прописываем
что-то типа такого
validates :first_name, :presence => true
validates :last_name, :presence => true
validates :email, :presence => true
и все было бы хорошо если бы форма была на одной странице.
А теперь вопрос, как поступть с validation если форма для апдейта first_name и last_name на одной странице а email на другой.
По умолчанию так сказать на форме где first_name и last_name если ее засабмитеть то будет ошибка что мол email требуется и это верно (у меня же email на другой странице нужно обновлять), тоже самое и на форме email где валидация будет просить first_name и last_name. Меня интересует как в Rails 3 корректно обрабатывать такую ситуацию.
К примеру в ASP.NET MVC я делаю как бы child ViewModel непосредственно для конкретного View проверяю поля и потом делаю маппинг свойств с родительской моделью. Как правильно это сделать в Rails 3?
Если я правильно понял ваш алгоритм, то сначала у вас создаётся запись с first_name и last_name, а потом уже в существующей записи обновляется поле email.
Тогда попробуйте
validates :first_name, :presence => true
validates :last_name, :presence => true
validates :email, :presence => true :on => :update
И при добавлении поля email загружать уже существующий объект.
Тогда на первой форме у вас будет будут проверяться первые два поля, вы сохраните объект.
Потом, на второй форме, вы загрузите объект с уже заполненными полями first_name и last_name, и обновите его. А при обновлении сработает валидация на поле email.
Немного устаревший, но позволяющий понять, принцип railscast на эту тему: railscasts.com/episodes/217-multistep-forms
средствами чистого Rails в рабочей системе
with_options :if => «cause == 1» do |client|
client.validates :prepay, :cost, :birthday, :phone1, :contract_date, :vin, :adress, :presence => 'true'
client.validates_presence_of :id_series, :id_number, :id_dep
client.validates_format_of :id_series, :id_number, :with => /[\d\s]/
client.validates_presence_of :fio
client.validates :car, :presence => true
end
with_options :if => 'cause == 5' do |client|
client.validates_presence_of :fio, :manager, :trade_in_price, :trade_in_desc
client.validates_associated :used_car
end
Условия это зло. Модель от этого неимоверно разрастется. Намного проще сделать новый уровень абстракции в приложении и назвать его, например, types. Итак, создаем два типа пользователя:
UserRegisterType < User и UserEmailSetterType < User(названия придумйте сами). Теперь, в контексте этих унаследованных моделей можно проставить нужные нам attr_accessible, validates, и прочие штуки. Более подробно о данном решении и подводных камнях можно почитать в блоге Кирилла Мокевнина
Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться