我正在尝试为所有CRUD操作创建数据库日志。我知道我可以转到每个控制器操作并插入方法以使其正常工作。有没有办法更优雅地执行此操作,以便在CRUD操作发生之前调用所有控制器的方法。这些是我正在使用的方法:
TransactionLog.create(:contact_id => contact_id) #Create the transaction
def self.start_logging(current_user, data, action, new_content ={}, old_content ={}, transaction_log_id)
@log = ChangeLog.new(:table => data, :action => action, :new_content => new_content.to_json, :old_content => old_content.to_json, :transaction_log_id => transaction_log_id)
@log.save
end
答案 0 :(得分:1)
尝试使用过滤器(请参阅此处的第8节:http://guides.rubyonrails.org/action_controller_overview.html)
答案 1 :(得分:0)
你可以做到
before_filter :your_method, only: ['create', 'update' 'destroy']
def your_method
#do the things
end
答案 2 :(得分:0)
before_filter的想法是要走的路。其他答案中缺少的是如何将其应用于所有控制器。最好的选择是使用定义和激活过滤器的代码创建一个mixin。
module HasCrudFilter
def self.included(base)
base.class_eval do
before_filter :my_filter, only: [:create, :update, :destroy]
def my_filter
# Your code here...
end
end
end
end
然后在您的控制器中
class MyModelController < ApplicationController
include HasCrudFilter
end