Rails在ActionController和ActiveJob中都使用了一个函数

时间:2016-02-29 16:26:08

标签: ruby-on-rails ruby-on-rails-4 actioncontroller

我们的控制器下有application.rb的通用日志记录功能。虽然活动作业找不到这个功能(我假设是因为我们的电子邮件作业扩展了ActiveJob :: Base vs我们的控制器,引用ActionController然后引用ActionController :: Base)

正确的地方放置日志记录功能,以便我们可以保留尽可能干的代码?

1 个答案:

答案 0 :(得分: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/
)

在Controller或ActiveJob的方法中,它被称为 -

  Trackers.track_action("eventName", {
    "someVar"     => "someValue",
  })

另一种选择是使用模型,但我觉得这更像是一个lib函数 - 我们可能会在以后把它变成一个宝石。

希望将来能帮助其他人。