2012-11-29 40 views
6

在Rails通知中,我訂閱了「process_action.action_controller」,並且想要向有效負載添加更多屬性。我怎樣才能做到這一點?如何將屬性添加到現有的通知負載?

我已經嘗試使用append_info_to_payload,但這似乎什麼都不做。

module AppendExceptionPayload 
    module ControllerRuntime 
    extend ActiveSupport::Concern 

    protected 

    def append_info_to_payload(payload) 
     super 
     payload[:happy] = "HAPPY" 
    end 
    end 
end 

認購和上面的代碼是在Rails引擎,所以這是我打這個電話,將其添加:

require 'append_exception_payload' 

module Instrument 
    class Engine < ::Rails::Engine 

    ActiveSupport.on_load :action_controller do 
     include AppendExceptionPayload::ControllerRuntime 
    end 

    end 
end 

回答

6

付出賞金後,我自己找到了解決辦法。 Rails真的很乾淨地處理這個問題。

基本上,append_info_to_payload方法就是爲此而設計的。

所以包括會話信息和signed_in用戶信息我說這個我application_controller.rb

def append_info_to_payload(payload) 
    super 
    payload[:session] = request.session_options[:id] rescue "" 
    payload[:user_id] = session[:user_id] rescue "unknown" 
end 
2

所以我跳下,並看看在API的process_action method (private)append_info_to_payload instance method (public)和proccess行動方法似乎調用append_info_to_payload在其代碼如下所示:

ActiveSupport::Notifications.instrument("process_action.action_controller", raw_payload) do |payload| 
    result = super 
    payload[:status] = response.status 
    append_info_to_payload(payload) 
    result 
    end 

和append_info_to_payload工作這樣的事情

def append_info_to_payload(payload) #:nodoc: 
    payload[:view_runtime] = view_runtime 
end 

我可以建議嘗試payload[:view_runtime],而不是payload[:happy]或試圖使用payload[:status]

讓我知道你上車,我會盡力幫助更多的,可惜的是真的這個東西沒有文檔。