2009-08-10 7 views
2

この方法を「メタタイズ」する方法はわかりませんが、単純であることがわかります。メソッドは次のようになりますヘルプRubyでのメタプログラミング:Activerecord Settersを上書きする

def check_sent=(value) 
     Date.parse(value) rescue @dates_bad = true 
     self.write_attribute(:check_sent, value) 
    end 

これはActiveRecordサブクラス用です。私が指定したすべてのフィールドについて、これらのメソッドを使用したいと考えています。 Rubyでこれを行う方法はありますか?

答えて

3
class Foo < ActiveRecord::Base 
    def self.define_date_setters(*fields) 
    fields.each do |field| 
     define_method("#{ field }=") do |value| 
     Date.parse(value) rescue @dates_bad = true 
     self.write_attribute(field, value) 
     end 
    end 
    end 

    define_date_setters :check_sent, :other_field, :yet_another_field 
end 

あなたが複数のクラスのためにその機能が必要な場合は、あなたとあなたのクラスを拡張モジュールにdefine_settersを移動することができます。

+0

ワウ。私は今これをチェックしています。迅速な対応に感謝します。 –

+0

さて、それは素晴らしいと完璧に動作します。私はすべての日付フィールドのためにそれを自動的に行うことができると思うが、それは私にとってはやや迷惑に思える。 –

関連する問題