У меня есть модель с множеством проверок, которые могут быть сгруппированы на основе различных условий. Грубая сила способ справиться с этим будет:
validates_presence_of :attr1, :if => :condition1
validates_something :attr2, :if => :condition1
validates_something_else :attr3, :if => :condition1
...
validates_presence_of :attr4, :if => :condition2
validates_something :attr5, :if => :condition2
validates_presence_of :attr6, :if => :condition2
...
Но это не похоже на СУХОЙ. Есть ли хороший способ сгруппировать проверки на основе условий? Подход, который я придумал:
class Condition1Validator < ActiveModel::Validator
def validate(record)
record.instance_eval do
validates_presence_of :attr1
validates_something, :attr2
validates_something_else :attr3
end
end
end
validates_with Condition1Validator, :if => :condition1
class Condition2Validator < ActiveModel::Validator
...
end
validates_with Condition2Validator, :if => :condition2
Кто-нибудь может придумать лучший способ?
Обновление: способ, который я опубликовал выше, имеет недостатки: вы не можете использовать if, если и т. Д. На вложенных валидаторах. Решение Джесси намного лучше.