2
我有一个宝石,我正在开发基于ApplicationController上的过滤器。它基本上是用于记录和一个模块定义了以下这样一个围绕过滤:Rails:包含相同过滤器两次的副作用
module LogExceptionFilter
self.included(base)
base.around_filter :do_a_bunch_of_logging_stuff
end
def do_a_bunch_of_logging_stuff
...
end
end
这恰好是一个围绕过滤器在哪里处理异常日志记录,但我的问题将适用于任何过滤器。
所以它应该像这样
class ApplicationController
include LogExceptionFilter
end
使用所以我很担心,如果有人做的是:
class ApplicationController
include LogExceptionFilter
include LogExceptionFilter
end
我不想执行do_a_bunch_of_logging_stuff
两次。所以首先
1)如果包括do_a_bunch_of_logging_stuff
两次,将导轨两次应用过滤器?
2)我有责任保护用户不要这样做吗?我可以用一个类变量这样做,是这样的:
module LogExceptionFilter
class << self
cattr_accessor :filter_loaded
end
self.included(base)
unless filter_loaded
base.around_filter :do_a_bunch_of_logging_stuff
filter_loaded = true
end
end
def do_a_bunch_of_logging_stuff
...
end
end
所以它的东西,我会想小心把这个变量不是线程安全的,但我不想写一个图书馆。这很容易被破坏。谢谢。