为所有控制器调用所有CREATE,UPDATE和DESTROY操作的常用方法

时间:2013-07-01 17:15:31

标签: ruby-on-rails ruby controller crud

我正在尝试为所有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

3 个答案:

答案 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