我已經定義了一個模塊來擴展ActiveRecord。Class_eval不能在每個塊內工作
在我的情況下,我必須生成實例方法,其中帶有作爲參數給出的符號給compound_datetime
類方法。當class_eval
在each
區塊之外被調用,但不在其內時調用它;在後一種情況下,我得到一個未定義的方法錯誤。
有誰知道我在做什麼錯?
module DateTimeComposer
mattr_accessor :attrs
@@attrs = []
module ActiveRecordExtensions
module ClassMethods
def compound_datetime(*attrs)
DateTimeComposer::attrs = attrs
include ActiveRecordExtensions::InstanceMethods
end
end
module InstanceMethods
def datetime_compounds
DateTimeComposer::attrs
end
def self.define_compounds(attrs)
attrs.each do |attr|
class_eval <<-METHODS
def #{attr.to_s}_to()
puts 'tes'
end
METHODS
end
end
define_compounds(DateTimeComposer::attrs)
end
end
end
class Account < ActiveRecord::Base
compound_datetime :sales_at, :published_at
end
當我嘗試訪問方法:
Account.new.sales_at_to
我得到一個MethodError: undefined method sales_at_to for #<Account:0x007fd7910235a8>
。
你能放這裏的錯誤日誌? – megas 2012-01-14 07:12:54
你能不能展示一些代碼實際上如何使用這個模塊? – rdvdijk 2012-01-14 11:48:01
現在比較好? – 2012-01-14 14:34:03