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
所以它的東西,我會想小心把這個變量不是線程安全的,但我不想寫一個圖書館。這很容易被破壞。謝謝。