2013-10-25 5 views
5

Eines der Dinge, die mich mit Rails verrückt macht ist, dass ich eine ROLLBACK Nachricht in der Konsole ohne Grund mit dem Rollback verbunden sehen. Dies führt mich oft dazu, nach einem Validierungsfehler zu suchen, aber es wäre nett, eine detailliertere Nachricht zu haben.Rails 4, bessere Anmeldung beim Rollback?

Gibt es trotzdem eine detailliertere Protokollierung für db-Rollbacks?

Antwort

5

Sie können einen Rückruf after_rollback verwenden.

Erstellen Sie ein Modul namens RollbackLogger und legen Sie sie in Ihrem app/Bedenken Verzeichnis

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 

umfassen dann dieses Modul in jedem Modell Active:

class Foo < ActiveRecord::Base 
    include RollbackLogger 
end 

Edit:

Wie Mr. Damien Roche schlägt vor, Sie können eine neue Datei im Verzeichnis config/initializers erstellen und folgende Zeile hinzufügen:

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

Alle Modelle werden automatisch das Modul RollbackLogger enthalten.

+0

Ich bin ziemlich neu bei Rails, wie würde ich das über alle Modelle auf eine nicht-intrusive Weise tun? –

+0

Überprüfen Sie meine aktualisierte Antwort. Hoffentlich ist das sauber genug. –

+2

@ChrisLedet siehe hier: http://stackoverflow.com/questions/2328984/rails-extending-activerecordbase. Wenn Sie Bedenken haben, können Sie 'ActiveRecord :: Base.send (: include, RollbackLogger)' in jedes Modell aufnehmen. –