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)
end
Any ideas?
Thanks,
Rob
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’
end
end
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?
end
Hope this helps!
-Nick
You could do something like:
validates_presence_of :a, :if => Proc.new { |r| !r.b? }
validates_presence_of :b, :if => Proc.new { |r| !r.a? }
-Jonny.
Thanks alot for all three suggestions!
The “validate” callback was what I was looking for, as it allows me to
make
the validations as complex as I like.
Thanks!
Rob