# lib/transaction_filter.rb
class TransactionFilter
def filter(controller)
return yield if controller.request.get?
ActiveRecord::Base.transaction do
yield
end
end
end
# application.rb
class ApplicationController < ActionController::Base
around_filter :transaction_filter
def transaction_filter(&block)
TransactionFilter.new.filter(self, &block)
end
end