2013-10-25 9 views
5

रेलों के साथ मुझे पागल करने वाली चीजों में से एक यह है कि मुझे कंसोल में ROLLBACK संदेश दिखाई देगा, जिसमें रोलबैक से कोई कारण नहीं है। यह अक्सर मुझे कुछ सत्यापन त्रुटि के शिकार में ले जाता है, लेकिन यह एक और विस्तृत संदेश होना अच्छा लगेगा।रेल 4, रोलबैक पर बेहतर लॉगिंग?

क्या डीबी रोलबैक के लिए अधिक विस्तृत लॉगिंग सक्षम करने के लिए वैसे भी है?

उत्तर

5

आप after_rollback कॉलबैक का उपयोग कर सकते हैं।

एक मॉड्यूल RollbackLogger बुलाया बनाएँ और अपने एप्लिकेशन/चिंताओं निर्देशिका के अंदर यह जगह

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 

तो हर ActiveRecord मॉडल में इस मॉड्यूल में शामिल हैं:

class Foo < ActiveRecord::Base 
    include RollbackLogger 
end 

संपादित करें:

Mr. Damien Roche के रूप में पता चलता है , आप config/initializers निर्देशिका के अंदर एक नई फ़ाइल बना सकते हैं और निम्न पंक्ति जोड़ सकते हैं:

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

सभी मॉडलों में स्वचालित रूप से RollbackLogger मॉड्यूल शामिल होगा।

+0

मैं रेल के लिए काफी नया हूं, मैं इसे सभी मॉडलों में एक गैर-घुसपैठ तरीके से कैसे करूँगा? –

+0

मेरा अद्यतन उत्तर देखें। उम्मीद है कि यह काफी साफ है। –

+2

@ क्रिसिसडेट यहां देखें: http://stackoverflow.com/questions/2328984/rails-extending-activerecordbase। चिंता के साथ, आप प्रत्येक मॉडल में शामिल करने के लिए 'ActiveRecord :: Base.send (: शामिल, रोलबैक लॉगर)' कर सकते हैं। –

संबंधित मुद्दे