Forum: Ruby on Rails Custom Validations

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Robert MannI (Guest)
on 2006-04-02 00:36
(Received via mailing list)
Does anyone how to create a validation that:

validates_presence_of :a  OR :b

I.e. :a OR :b must be present.

I thought this would probably be possible with some kind of validation
callback, e.g.:

def check_a_or_b_is_set
  return (a or b)

Any ideas?

Ian W. (Guest)
on 2006-04-02 01:22
(Received via mailing list)
How about something like:

validates_each :a do |record, attribute, value|
  if value.blank? and record.send(:b).blank?
    record.errors.add_to_base 'a or b required'
Nick S. (Guest)
on 2006-04-02 06:06
(Received via mailing list)
Another way to do 'custom' validation is to simply supply a "validate"
method in your class. This gets called before you save/update. You can
simplify a bit what Ian has suggested.

#just place this in your model class
def validate
  errors.add_to_base "A or B are required" if a.blank? and b.blank?

Hope this helps!
Jonathan V. (Guest)
on 2006-04-02 06:12
(Received via mailing list)
You could do something like:

validates_presence_of :a, :if => { |r| !r.b? }
validates_presence_of :b, :if => { |r| !r.a? }

Robert MannI (Guest)
on 2006-04-02 12:50
(Received via mailing list)
Thanks alot for all three suggestions!

The "validate" callback was what I was looking for, as it allows me to
the validations as complex as I like.


This topic is locked and can not be replied to.