validates_presence_of
принимает атрибут if
, который принимает одну из трех вещей, согласно документации : строку, метод или процедуру.
if - Specifies a method, proc or string to call to determine if the validation
should occur (e.g. :if => :allow_validation, or
:if => Proc.new { |user| user.signup_step > 2 }).
The method, proc or string should return or evaluate to a true or false value.
Мне пришлось использовать процедуру, поскольку я хотел убедиться, что определенный параметр был заполнен перед проверкой:
validates_presence_of :bar, :if => Proc.new { |foo| !foo.age.blank? }