Вопрос элегантности, конечно, субъективен, но следующий пример будет делать именно то, что вы хотите, включая отдельные сообщения об ошибках для 2 недопустимых условий, т.е. оба значения предоставлены, а значения не указаны.
class Foo < ActiveRecord::Base
validate :one_and_only_one
def one_and_only_one()
errors.add_to_base("You must provide either a foo or a bar")
if self.foo.blank? && self.bar.blank?
errors.add_to_base("You cannot provide both a foo and a bar")
if !self.foo.blank? && !self.bar.blank?
end
end
EDIT
Если подумать о большем количестве решений, это может пройти испытание на элегантность лучше
errors.add_to_base("You must provide either a foo or a bar")
unless [f.foo, f.bar].compact.length == 1
Хотя это не удастся для полей, заполненных пробелом.