किसी विशेषता का मूल मान रेल में कैसे प्राप्त करें


96

क्या कोई मूल मूल्य प्राप्त करने का एक तरीका है कि एक ActiveRecord विशेषता (= मूल्य जो डेटाबेस से लोड किया गया था)?

मैं एक पर्यवेक्षक में ऐसा कुछ चाहता हूं

before_save object
  do_something_with object.original_name
end

कार्य हैश तालिका से ऑब्जेक्ट को निकालना है (वास्तव में, इसे अपडेट करने पर तालिका में किसी अन्य कुंजी पर ले जाएं)।

जवाबों:


243

रेल से पहले 5.1

जोड़ _wasअपनी विशेषता के लिए आप पिछले मूल्य दे देंगे।

रेल के लिए 5.1+

नीचे लुकास एंड्रेड के जवाब से कॉपी किया गया : https://stackoverflow.com/a/50973808/9359123


लागू करना _wasरेल 5.1 में पदावनत है, अब आपको संलग्न करना चाहिए_before_last_save

कुछ इस तरह:

before_save object
  do_something_with object.name_before_last_save
end

डेटाबेस में आपके अंतिम सहेजने से पहले नाम को वापस कर देगा (काम करता है बचाने और बनाने के लिए) दस्तावेज़ के


बीच _wasऔर उसके _before_last_saveअनुसार अंतर :

डॉक्स से _was स्रोत

def attribute_was(attr)
  attribute_changed?(attr) ? changed_attributes[attr] : __send__(attr)
end

डॉक्स से _before_last_save स्रोत

def attribute_before_last_save(attr_name)
  mutations_before_last_save.original_value(attr_name)
end

7
जैसे: के लिए self.context:self.context_was
Freedom_Ben

2
इस के लिए दस्तावेज कहां है?
j


दस्तावेज़ीकरण में, कोई "पदावनति" चेतावनी नहीं है _was
राएल गुगेलमिन कुन्हा

11

रेल के लिए 5.1+

लागू करना _wasरेल 5.1 में पदावनत है, अब आपको संलग्न करना चाहिए_before_last_save

कुछ इस तरह:

before_save object
  do_something_with object.name_before_last_save
end

डेटाबेस में आपके अंतिम सहेजने से पहले नाम को वापस कर देगा (काम करता है बचाने और बनाने के लिए) दस्तावेज़ के


बीच _wasऔर उसके _before_last_saveअनुसार अंतर :

डॉक्स से _was स्रोत

def attribute_was(attr)
  attribute_changed?(attr) ? changed_attributes[attr] : __send__(attr)
end

डॉक्स से _before_last_save स्रोत

def attribute_before_last_save(attr_name)
  mutations_before_last_save.original_value(attr_name)
end

आप यहां एक बेहतर उदाहरण देख सकते हैं


1
attribute_wasके पक्ष में पदावनत किया गया है attribute_in_database, जबकि attribute_before_last_save5.1 के रूप में एक पूरी तरह से नई विधि है जो रेल के पुराने संस्करणों में कोई समकक्ष नहीं है। स्रोत: github.com/rails/rails/pull/25337#issuecomment-225166796
ohaleck


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.