0
我們的控制器下的application.rb中有一個通用日誌記錄功能。雖然(我假設,因爲我們的電子郵件作業擴展ActiveJob :: Base與我們的控制器引用ActionController,然後引用ActionController :: Base)Rails利用ActionController和ActiveJob中的函數
哪裏合適的地方是放置我們可以保留的日誌功能是儘可能DRY代碼?
我們的控制器下的application.rb中有一個通用日誌記錄功能。雖然(我假設,因爲我們的電子郵件作業擴展ActiveJob :: Base與我們的控制器引用ActionController,然後引用ActionController :: Base)Rails利用ActionController和ActiveJob中的函數
哪裏合適的地方是放置我們可以保留的日誌功能是儘可能DRY代碼?
所以在和別人交談之後,最好的課程是通過使用lib文件夾並在其中創建一個模塊來決定的。
我們創建了一個名爲trackers的文件夾和一個名爲tracker.rb的文件。下面是什麼樣子
module Trackers
module_function
mattr_accessor :controller
def track_action(event_name, event_params)
event_params["time"] ||= Time.now.utc.to_i
# Controller scope only - this only gets executed if the function is called via a controller vs an ActiveJob
if controller
event_params["controller_name"] ||= controller_name
event_params["action_name"] ||= action_name
end
#Other stuff redacted
end
end
內application.rb中的文件,我們修改了代碼,包括文件夾作爲這樣一個基本的片斷:在一個方法
config.autoload_paths += %W(
#{config.root}/lib/
#{config.root}/lib/trackers/
)
在控制器或ActiveJob它被稱爲這樣 -
Trackers.track_action("eventName", {
"someVar" => "someValue",
})
另一種方法是使用一個模型,但我覺得這是更一個lib功能 - 我們可以把它變成一個寶石以後。
希望這可以幫助其他人在未來。