2009-08-10 36 views
2

我不知道如何「元化」這種方法,但我知道它應該很簡單。該方法看起來像這樣幫助Ruby中的元編程:覆蓋Activerecord設置器

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

哇。我現在要檢查這個。感謝您的快速響應。 – 2009-08-10 14:53:08

+0

好的,這是真棒,完美的作品。我想我可以自動爲所有的日期字段,但這似乎有點煩我。 – 2009-08-10 14:55:40