モデルには、Proc
が添付されたベンダーのコード(変更できません)の中にクラスがあります。シャツクラスの例を考えてみると、コードは以下のようになります。class_evalを使用して、レールでbefore_validationコールバックを削除します。
class Shirt < ActiveRecord::Base
before_validation -> { self.size ||= 'medium' }
# Some code here
end
(コードのこの作品は、デフォルトのシャツのサイズを設定していることに注意してください)
言って、私は今、デコレータクラスの大型にデフォルトのシャツのサイズを変更する必要があります。もとのクラスのbefore_validation
コールバックがまだ呼ばれているので、コードが
Shirt.class_eval do
before_validation -> { self.size ||= 'large' }
# Some more code
end
のようになります。ただし、デフォルトのシャツのサイズはまだmedium
に設定されています。
元のコードでコールバックを削除し、代わりにclass_evalの検証を使用するという洗練された方法はありますか?