2012-08-03 32 views
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 

所以它的东西,我会想小心把这个变量不是线程安全的,但我不想写一个图书馆。这很容易被破坏。谢谢。

回答

相关问题