2013-10-25 25 views
5

Rails ile beni çıldırtan şeylerden biri, geri dönüşe hiçbir sebep gösterilmeden konsolda bir ROLLBACK mesaj göreceğim. Bu genellikle bazı doğrulama hataları için beni avlamaya yönlendirir, ancak daha ayrıntılı bir mesajın olması güzel olurdu.Raylar 4, daha iyi geri alma için oturum açıyor musunuz?

Db geri dönüşleri için daha ayrıntılı günlük kaydı etkinleştirmek için zaten var mı?

cevap

5

after_rollback geri bildirimini kullanabilirsiniz.

RollbackLogger adlı bir modül oluşturun ve uygulamanızı/kaygılar dizinine içine yerleştirin

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 

sonra her ActiveRecord modelinde bu modülü içerir:

class Foo < ActiveRecord::Base 
    include RollbackLogger 
end 

Düzenleme: Mr. Damien Roche gibi

anlaşılacağı config/initializers dizininin içinde yeni bir dosya oluşturabilir ve aşağıdaki satırı ekleyebilirsiniz:

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

Tüm modeller otomatik olarak RollbackLogger modülünü içerecektir.

+0

Rails'e oldukça yeni geldim, bunu nasıl tüm modellerde müdahaleci olmayan bir şekilde yapabilirim? –

+0

Güncellenmiş yanıtımı inceleyin. Umarım bu yeterince temiz. –

+2

@ChrisLedet bkz. Http://stackoverflow.com/questions/2328984/rails-extending-activerecordbase. Endişe ile, her modele dahil etmek için ActiveRecord :: Base.send (: include, RollbackLogger) 'yapabilirsiniz. –