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函数访问路径,数据,标题和响应?