开发者

Specifying two conditions with :if

I have a model which validates presence of an attribute if a check box is checked in the view.

The code is something like this:

validates_presence_of :shipping_first_name, :if => :receive_by_email_is_unchecked

I am looking to have another condition of this validation.So how do I go about doing this ??

My ass开发者_StackOverflow社区umption is that something like this would do:

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

I am not sure if this is the write way of doing it or not ??

Any suggestions would be appreciated.


You can pass method names in an array:

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

Alternatively you can use proc if you don't want to define separate methods just for conditioning validations:

validates_presence_of :shipping_first_name, :if => proc { !receive_by_email? && form_first_step_validation }


I don't think that will work, but have a look at the source code for validates_presence_of https://github.com/rails/rails/blob/master/activemodel/lib/active_model/validations/presence.rb

You can build your own validator to do exactly that


Ryan Bates covered this in one of his first Rails casts http://railscasts.com/episodes/41-conditional-validations

It's still valid although syntax may be slightly different for Rails v 3 +

I assume you are working on a Rails 2.x app as the syntax you use is not Rails 3 syntax Rails 3.x syntax would be

validates :field_1, :field_2, :presence_of => true, :if => # Use a proc, or an array of conditions here. see the valid examples and comments that you have already received for this question from @jimworm and @Michał Szajbe

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜