現在の状態に応じて異なるバリデーターを必要とするモデルがあります。インスタンスごとに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バリデーターをインスタンスメソッドとして呼び出すための適切な方法はありますか?SequelのインスタンスベースのバリデーターのアプローチはActiveRecordのクラスベースのアプローチよりも合理的だと思いますが、私はここで判断するつもりはありません。もっと興味深い問題の解決に戻りたいと思います。他の人がこれに出くわし、興味深い要点や宝石を教えてくれることを願っています。