2016-02-29 37 views
0

我們的控制器下的application.rb中有一個通用日誌記錄功能。雖然(我假設,因爲我們的電子郵件作業擴展ActiveJob :: Base與我們的控制器引用ActionController,然後引用ActionController :: Base)Rails利用ActionController和ActiveJob中的函數

哪裏合適的地方是放置我們可以保留的日誌功能是儘可能DRY代碼?

回答

1

所以在和別人交談之後,最好的課程是通過使用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功能 - 我們可以把它變成一個寶石以後。

希望這可以幫助其他人在未來。

相關問題