2013-10-25 2 views
5

私がRailsに夢中になっていることの1つは、コンソールにROLLBACKというメッセージが表示され、ロールバックに理由が付けられていないということです。これはしばしばいくつかの検証エラーのために私を狩りに導くが、より詳細なメッセージを持っているとよいだろう。Rails 4、より良いロールバックをログに記録できますか?

dbロールバックの詳細ログを有効にする方法はありますか?

答えて

5

after_rollbackコールバックを使用できます。

RollbackLoggerと呼ばれるモジュールを作成し、すべてのActiveRecordのモデルでは、このモジュールを含む、あなたのアプリ/懸念ディレクトリ内

module RollbackLogger 
    extend ActiveSupport::Concern 

    included do 
    after_rollback :log_status, on: [:create, :update] 
    end 

    def log_status 
    Rails.logger.info "Rollback caused by: #{self.errors.full_messages}" 
    end 
end 

を置き:

class Foo < ActiveRecord::Base 
    include RollbackLogger 
end 

編集:

Mr. Damien Rocheが示すようにconfig/initializersディレクトリ内に新しいファイルを作成し、次の行を追加することができます。

ActiveRecord::Base.send(:include, RollbackLogger) 

すべてのモデルにRollbackLoggerモジュールが自動的に含まれます。

+0

私はRailsには新しく、非侵入的な方法ですべてのモデルでこれをどうやってやりますか? –

+0

更新された回答を確認してください。うまくいけば、これは十分にきれいです。 –

+2

@ChrisLedet参照:http://stackoverflow.com/questions/2328984/rails-extending-activerecordbase。懸念されている状況では、 'ActiveRecord :: Base.send(:include、RollbackLogger)'をすべてのモデルに含めることができます。 –

関連する問題