2015-02-24 83 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实例的引用。我认为如果你将调用响应存储到一个实例变量中,你应该能够在回调方法中解析你想要的数据。