2016-02-29 2 views
0

У нас есть общая функция ведения журнала, которая находится в application.rb под нашими контроллерами. Эта функция не найдена активным заданием, хотя (я предполагаю, потому что наши задания электронной почты расширяют ActiveJob :: Base и наши контроллеры, которые ссылаются на ActionController, который ссылается на ActionController :: Base)Рельсы используют функцию как в ActionController, так и в ActiveJob

Где бы поместили место функция регистрации, чтобы мы могли сохранить код как СУХОЙ, насколько это возможно?

ответ

1

Итак, после некоторого разговора с другими, лучший курс был решен с помощью папки lib и создания модуля внутри него.

Мы создали папку с трекерами и файл с именем 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 функции - мы можем превратить его в драгоценный камень позже.

Надеюсь, что это поможет другим в будущем.