Указание двух условий с помощью: если - PullRequest
1 голос
/ 30 июля 2011

У меня есть модель, которая проверяет наличие атрибута, если в представлении установлен флажок.

Код выглядит примерно так:

validates_presence_of :shipping_first_name, :if => :receive_by_email_is_unchecked

Я хочу получитьдругое условие этой проверки. Так как мне поступить так ??

Я предполагаю, что что-то вроде этого будет делать:

validates_presence_of :shipping_first_name, :if => {:receive_by_email_is_unchecked,:form_first_step_validation}

Я не уверен, что это записьспособ сделать это или нет ??

Любые предложения будут оценены.

Ответы [ 3 ]

1 голос
/ 30 июля 2011

Вы можете передавать имена методов в массиве:

validates_presence_of :shipping_first_name, :if => [:receive_by_email_is_unchecked, :form_first_step_validation]

В качестве альтернативы вы можете использовать proc, если вы не хотите определять отдельные методы только для проверки условий:

validates_presence_of :shipping_first_name, :if => proc { !receive_by_email? && form_first_step_validation }
0 голосов
/ 30 июля 2011

Райан Бейтс рассказал об этом в одном из своих первых бросков на Рельсы. http://railscasts.com/episodes/41-conditional-validations

Это все еще действует, хотя синтаксис может быть немного другим для Rails v 3 +

Я предполагаю, что вы работаете над приложением Rails 2.x, поскольку синтаксис, который вы используете, не является синтаксисом Rails 3 Синтаксис Rails 3.x будет

validates :field_1, :field_2, :presence_of => true, :if => # Используйте процедуру или массив условий здесь. см. действительные примеры и комментарии, которые вы уже получили по этому вопросу от @jimworm и @ Michał Szajbe

0 голосов
/ 30 июля 2011

Не думаю, что это сработает, но взгляните на исходный код validates_presence_of https://github.com/rails/rails/blob/master/activemodel/lib/active_model/validations/presence.rb

Вы можете создать свой собственный валидатор, чтобы сделать именно это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...