У меня есть модель, которой нужны разные валидаторы в зависимости от ее текущего состояния.Как мне следует вызывать валидаторы ActiveRecord для каждого экземпляра?Я хотел бы использовать как можно больше сантехники, но я не уверен, как продолжить.
class Order < ActiveRecord::Base
attr_accessible :state
validate :state_specific_validations
def state_specific_validations
if :paid == self.state
# Warning: here be Unicorns...
# Wishful thinking...
validate_presence_of :paid_at
validate_associated :purchaser
# Hopeful. What are the validators called internally in Rails?
errors << PresenceValidator.new(self, :paid_at).valid?
errors << AssociationValidator.new(self, :paid_at).valid?
# Plan B
# ... Hoping for help from the audience ...
else
# Even more complicated validator logic, hoping for some DRY validators
end
end
end
Я мог бы просто использовать пользовательские валидаторы, но зачем мне дублировать все встроенныелогика валидатора (сообщения об ошибках i18n и т. д.)?
Есть ли аккуратный способ вызова валидаторов Rails как методов экземпляра?Я думаю, что подход Сиквела к валидаторам на основе экземпляров более разумен, чем к классам ActiveRecord, но я здесь не для того, чтобы судить.Я просто хотел бы вернуться к решению более интересных проблем.Я просто надеюсь, что другие сталкивались с этим и могут указать мне на какой-нибудь интересный смысл или драгоценность.