2012-01-27 12 views
14

ऐसा लगता है जैसे पेपरक्लिप ActiveRecord गंदे मॉडल का सम्मान नहीं करता है। मैं after_save कॉलबैक में परिवर्तन का पता कैसे लगा सकता हूं।यह पता लगाने के लिए कि क्या पेपरक्लिप अटैचमेंट को after_save कॉलबैक में बदला गया था?

class User 

    has_attachment :avatar  
    after_save :do_something 

    def do_something 
    if name_changed? 
     # 
    end 

    # How to determine avatar was changed? 
    #if avatar_changed? 
    # # 
    #end 

    end 
end 

नोट

मैं मैं before_saveavatar.dirty? कॉल का उपयोग करके कॉलबैक में परिवर्तन का पता लगा सकते हैं, लेकिन dirty ध्वज गलत पर सेट है के बाद सहेजें।

मैं एक प्रोसेसर जोड़ सकता हूं, लेकिन मुझे मॉडल डेटा सहेजने के बाद अपने कार्यों को करने की ज़रूरत है।

उत्तर

26

आप विशेषताओं में से एक के लिए _changed? विधि तक पहुँचने की कोशिश कर सकते:

if avatar_updated_at_changed? 
    # do something 
end 
+1

यही तो मैं अभी कर रहा हूँ मैं सोच रहा हूं कि कोई बेहतर तरीका है या नहीं। –

+1

क्या आप कभी बेहतर समाधान के साथ आए थे? –

3

जब मैं इस डेटा का एक्सेस की जरूरत के बाद बचाने के लिए, मैं आम तौर पर यह तरीका अपनाते हैं:

class Foo 

    has_attachment :avatar 
    before_save :check_for_avatar_changes 
    after_save :do_something 

    def do_something 
    if @avatar_has_changes 
     # 
    end 
    end 

    def check_for_avatar_changes 
    @avatar_has_changes = self.avatar.dirty? 
    end 

end 
+0

अपनी पोस्ट की गुणवत्ता में सुधार करने के लिए कृपया अपनी पोस्ट को समस्या का समाधान कैसे/क्यों करें। –

+0

check_for_avatar_changes के कोड में कोई समस्या है ... यदि फ़ंक्शन गलत लौटाता है, तो मॉडल सहेजा नहीं जाएगा, क्योंकि यह पहले से सहेजा गया कॉलबैक है। – Christian

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