我希望能够使传递给我的类方法的选项(可审计)可用于实例方法。我使用模块混合了类和实例方法。如何使用通过模块混入的类和实例方法中的类变量
最明显的选择是使用一个类变量,但在尝试访问时,我得到一个错误是:
在可审计
未初始化的类变量@@ auditable_only_once
class Document
include Auditable
auditable :only_once => true
end
# The mixin
module Auditable
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def auditable(options = {})
options[:only_once] ||= false
class_eval do
# SET THE OPTION HERE!!
@@auditable_only_once = options[:only_once]
end
end
end
private
def audit(action)
# AND READ IT BACK LATER HERE
return if @@auditable_only_once && self.audit_item
AuditItem.create(:auditable => self, :tag => "#{self.class.to_s}_#{action}".downcase, :user => self.student)
end
end
我已经剥去了一些代码,使这个更容易阅读,完整的代码在这里:https://gist.github.com/1004399(编辑:Gist现在包括解决方案)
在版本在GitHub上只有指定当一个@在auditable_only_once前(线16),但你已经在代码中解决了这个问题。您是否使用该修复测试了代码?它仍然不起作用吗? – Jonathan 2011-06-02 13:42:30
感谢您发现,我实际上尝试过单个和双个@,所以必须将更新版本的代码复制到Gist。现在修复。 – Kris 2011-06-03 15:15:03