私は、現在の状態に応じて異なるバリデーターを必要とするモデルを持っています。インスタンスごとにActiveRecordバリデーターを呼び出すにはどうしたらよいですか?私はできるだけ多くの配管を再利用したいと思いますが、私はどのように続けるか分かりません。インスタンスメソッド(別名Sequel)として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
私は、カスタムバリデータを使用することができますが、なぜ私はすべてのビルトインバリロジック(国際化エラーメッセージなど)を複製する必要があるでしょうか?
Railsバリデーターをインスタンスメソッドとして呼び出す方法はありますか? SequelのインスタンスベースのバリデータのアプローチはActiveRecordのクラスベースよりも妥当だと思いますが、私はここで判断するのではありません。私はもっと興味深い問題を解決することに戻ってみたいです。私は、他の人がこれを見つけて、興味深い要点や宝石に向けることができることを願っています。
ご意見ありがとうございます。 'with_options'は私が将来もっと多くのものを使っていることでしょう。私はあなたのソリューションを使用しているようですが、私が投稿した答えを最初に見ることはできますか?私はルビーシングルトンが私の脳を歪ませているかどうか分かりません。 :) – pithyless