2015-02-24 128 views
0

::加載ActiveModel回調訪問屬性我有兩個類:在回調函數

1)的API(ApiClient)負責製作的HTTP請求(GET,PUT,POST,DELETE)。

require 'faraday' 

module Assets 
    class ApiClient 
    extend ActiveModel::Callbacks 
    define_model_callbacks :post, :put, :delete 

    after_post Assets::AuditTrail 
    after_put Assets::AuditTrail 
    after_delete Assets::AuditTrail 

    def initialize(url, username = nil, password = nil) 
     @connection = Faraday.new(url) do |faraday| 
     faraday.basic_auth(username, password) 
     faraday.request :url_encoded # form-encode POST params 
     faraday.response :logger # log requests to STDOUT 
     faraday.adapter :net_http # make resusts with Net::HTTP 
     faraday.use Errors::RaiseError # include custom middleware 
     end 
    end 

    def get(path, parameter = nil) 
     @connection.get path, parameter 
    end 

    def post(path, data, headers = {}) 
     response = @connection.post path, data, headers 
     run_callbacks :post 
     return response 
    end 

    def put(path, data, headers = {}) 
     response = @connection.put path, data, headers 
     run_callbacks :put 
     return response 
    end 

    def delete(path) 
     response = @connection.delete path 
     run_callbacks :delete 
     return response 
    end 
    end 
end 

2)審計跟蹤(AuditTrail)負責登錄到數據庫。

module Assets 
    class AuditTrail 
    def self.after_post(obj) 
     puts 'IN THE AFTER POST!!!' 
    end 

    def self.after_put(obj) 
     puts 'IN THE AFTER PUT!!!!' 
    end 

    def self.after_delete(obj) 
     puts 'IN THE AFTER DELETE!!!!' 
    end 
    end 
end 

每次PUT,POST或DELETE請求時我要在數據庫中記錄事務,通過我的跟蹤線索類。我使用ActiveModel :: Callbacks來設置它。

我很好奇我如何在AuditTrail函數中訪問我的函數參數?例如,當我輸入AuditTrail.after_post函數時,有沒有辦法從post函數訪問路徑,數據,標題和響應?

回答

0

您的回調方法中的參數obj是對從中調用回調的ApiClient實例的引用。我認爲如果你將調用響應存儲到一個實例變量中,你應該能夠在回調方法中解析你想要的數據。