cwninja के जवाब को चाल करना चाहिए, लेकिन इसके लिए थोड़ा और कुछ है।
सबसे पहले, मूल विशेषता हैंडलिंग write_attribute विधि के साथ की जाती है ताकि आपको इसमें टैप करना चाहिए।
रेलों में भी कॉलबैक संरचना में निर्मित किया गया है जो टैप करने में अच्छा लगा सकता है, हालांकि यह तर्कों को पार करने की अनुमति नहीं देता है जो एक परेशानी का थोड़ा सा है।
का उपयोग करते हुए कस्टम कॉलबैक आप इस तरह यह कर सकता है:
class Person < ActiveRecord::Base
def write_attribute(attr_name, value)
attribute_changed(attr_name, read_attribute(attr_name), value)
super
end
private
def attribute_changed(attr, old_val, new_val)
logger.info "Attribute Changed: #{attr} from #{old_val} to #{new_val}"
end
end
आप रेल कॉलबैक (विशेष रूप से उपयोगी आप एक से अधिक कॉलबैक और/या उपवर्गीकरण हो सकता है अगर) का उपयोग करने के लिए आप कुछ इस तरह कर सकता है की कोशिश करना चाहता है तो :
class Person < ActiveRecord::Base
define_callbacks :attribute_changed
attribute_changed :notify_of_attribute_change
def write_attribute(attr_name, value)
returning(super) do
@last_changed_attr = attr_name
run_callbacks(:attribute_changed)
end
end
private
def notify_of_attribute_change
attr = @last_changed_attr
old_val, new_val = send("#{attr}_change")
logger.info "Attribute Changed: #{attr} from #{old_val} to #{new_val}"
end
end
स्रोत
2009-10-03 23:49:28
पीटर, यह सुंदर है, मुझे "write_attribute" का एक टन बचाने के लिए जा रहा है, मैंने अपने पूरे कोड को अलग कर दिया है। धन्यवाद! – BushyMark
लगता है कि यह केवल रेल 2 के लिए है। – lulalala
बिना किसी तारीख के Google के माध्यम से इसका आया। इस हालिया वॉथथ्रू ने मुझे जो चाहिए था: ['after_callbacks'] में मॉडल के परिवर्तनों को कैसे ट्रैक करें (http://ruby-journal.com/how-to-track-changes-with-after-callbacks-in- रेल-3-या-नए /) – Jay