मैंने changes
विधि का उपयोग नहीं किया। लेकिन मुझे यकीन है कि आप हमेशा जादू तरीकों <attribute_name>_changed?
और <attribute_name>_was
उपयोग कर सकते हैं कर रहा हूँ:
services.any? {|s| s.attribute_name_changed?}
services.map(&:attribute_name_was)
अधिक जानकारी के लिए
देखें रयान बेट्स के railscast: #109 episode
अद्यतन: आप :after_delete
पारित कर सकते हैं, और has_many
करने के लिए :after_add
कॉलबैक एसोसिएशन सीधे:
has_many :items, :after_add => :my_method_or_proc1, :after_remove => :my_method_or_proc2
कार बनें इन कॉलबैक का उपयोग करके ईफुल करें और ध्यान दें कि वे कैसे काम करते हैं। वे items.build
और items.create
पर पर कॉल किए जाते हैं। तो अगर आप items.build
फोन और उसके बाद पैरेंट ऑब्जेक्ट (नेस्टेड विशेषताओं के साथ उदाहरण के लिए) को बचाने after_add
कॉलबैक जुड़े वस्तु के निर्माण पर केवल एक बार बुलाया जाएगा। इसका मतलब है कि यदि माता-पिता के पास सत्यापन है तो items
डेटाबेस में सहेजा नहीं जाएगा और आप after_add
कॉलबैक पर भरोसा नहीं कर सकते हैं। दूसरे शब्दों में यह नहीं कहता कि जोड़ा गया एसोसिएशन का रिकॉर्ड डीबी में सहेजा गया था। इसलिए आपने गारंटी दी है कि आइटम जोड़ा गया है और केवल कॉल items.create
पर सहेजा गया है। मुझे उम्मीद है कि आप इस स्पष्टीकरण को समझेंगे।
मेरे लिए यह केवल काम करता है, यदि संबंधित ऑब्जेक्ट अपडेट किया गया है। यह मेरे लिए काम नहीं करता है, अगर संबंधित वस्तु को जोड़ा या हटा दिया गया है (तब से यह अब 'सेवाओं' एसोसिएशन में मौजूद नहीं है)। मैं क्या गलत कर रहा हूं? – morgler