2011-08-15 7 views
10

मैं किसी ऑब्जेक्ट को अपडेट करते समय परिवर्तनों को लॉग करने का एक तरीका जानने का प्रयास कर रहा हूं। अभी मेरे पर्यवेक्षक सभी मौजूदा मूल्यों को स्टोर करेंगे लेकिन मैं यह निर्धारित करने के लिए खो गया हूं कि कौन से फ़ील्ड बदल गए हैं और उन्हें अपने फ़ीड डीबी में कैसे स्टोर किया जाए।रेलवे पर्यवेक्षकों के साथ ट्रैकिंग क्षेत्र में परिवर्तन

सादगी के लिए यहां एक नमूना मॉडल और पर्यवेक्षक है। मेरा लक्ष्य यह ट्रैक करना है कि कौन सा फ़ील्ड अपडेट किया गया था और इसे मेरे फ़ीड डीबी में स्टोर किया गया था। यदि आवश्यक हो तो मैं अपने डीबी में नए फ़ील्ड जोड़ने के लिए खुला हूं। अगर आपका कोई प्रश्न हैं, तो मुझे से पूछें।

मॉडल

# Table name: milestones 
# 
# id   :integer   not null, primary key 
# name   :string(255) 
# project_id :integer 
# target_date :datetime 

ऑब्जर्वर ट्रैकिंग परिवर्तन

class MilestoneObserver < ActiveRecord::Observer 

    def after_update(milestone) 
     f = Feed.new(
      :action => milestone.name, 
      :project_id => milestone.project_id, 
      :updated_by_id => "Jordan") 
     f.save 
    end 
end 

उत्तर

12

जानने के लिए कौन क्षेत्रों बदल दिया है, कार्य करें:

object.changes 

यहाँ अच्छा लेख देखें: http://ryandaigle.com/articles/2008/3/31/what-s-new-in-edge-rails-dirty-objects

+0

अब मैं बस मेरी रूबी पाने के लिए जरूरी है जोड़ी करने के लिए foo ताकि मैं हैश के माध्यम से पुन: प्रयास कर सकूं ताकि मैं इसे कुछ साफ कर सकूं। पारितोषिक के लिए धन्यवाद! – jlarry