2014-04-06 4 views
11

मैं एक सशर्त after_update बनाने के लिए कोशिश कर रहा हूँ, मैं निम्नलिखित है:after_update कॉलबैक पर बदल गुण प्राप्त

after_update do |participant| 
    Rails.logger.info "#{self.previous_changes} changed." 
    if self.previous_changes.include?(:current_distance) 
     #Do my stuff ... 
    end 
    end 

लकड़हारा प्रिंट खाली हैश: {}

मैं कैसे जांच कर सकते हैं जो विशेषता किया गया है बदला हुआ?

मैं विशेषता का अद्यतन करने के लिए: participant.update_attribute(:current_distance, distance) का उपयोग कर रहा हूं।

उत्तर

16

आप changesprevious_changes का उपयोग नहीं करना चाहते हैं। आप अभी भी वही बचत लेनदेन में हैं, इसलिए आप जो खोज रहे हैं वह changes में है। अद्यतन पूरा होने के बाद previous_changes में जानकारी नहीं होगी।

5.1.1 रेल:
उपयोग changes के बजाय saved_changes के रूप में यह नए संस्करण में हटा दिया जाएगा।

+0

कूल सामान! लेकिन जब यह 'after_update' कॉलबैक तक पहुंचता है तो अद्यतन पहले ही पूरा नहीं होना चाहिए? – kiddorails

+1

पूर्ण कॉलबैक श्रृंखला पूरी होने तक अपडेट को "पूर्ण" नहीं माना जाता है। विवरण के लिए कृपया http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html देखें। –

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