我希望能夠使傳遞給我的類方法的選項(可審計)可用於實例方法。我使用模塊混合了類和實例方法。如何使用通過模塊混入的類和實例方法中的類變量
最明顯的選擇是使用一個類變量,但在嘗試訪問時,我得到一個錯誤是:
在可審計
未初始化的類變量@@ 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