我已经定义了一个模块来扩展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