2010-02-20 19 views
5

में बदल गया है, मेरे पास एक डेटाबेस फ़ील्ड है जहां मैं अपना पासवर्ड संग्रहीत करना चाहता हूं। मेरे मॉडल में पहले_क्रेट फिल्टर में मैं एक एन्क्रिप्शन फ़ंक्शन कॉल करता हूं और स्पष्ट टेक्स्ट से एन्क्रिप्टेड टेक्स्ट में सहेजता हूं।जांचें कि क्या फ़ील्ड का मान पहले_अपडेट फ़िल्टर

अब मैं एन्क्रिप्शन के लिए पहले_update का उपयोग करना चाहता हूं, लेकिन केवल तभी मूल्य बदल गया है। फ़ील्ड मान बदल गया है या नहीं, यह जांचने के लिए मैं एक शर्त कैसे लिख सकता हूं?

उत्तर

4

चूंकि आप आमतौर पर उस फ़ील्ड का उपयोग करके मॉडल में पासवर्ड संग्रहीत नहीं करते हैं, जिसे आप फॉर्म में बेनकाब करेंगे, तो इसे केवल unless password.blank? अपडेट करने के लिए पर्याप्त होना चाहिए और "हैश_पासवर्ड" फ़ील्ड में वास्तविक पासवर्ड होना चाहिए जिसे आपने ' फार्म के लिए खुलासा नहीं है।

attr_protected के साथ अपने एन्क्रिप्टेड पासवर्ड को अतिरिक्त रूप से सुरक्षित करने के लिए इंगित करने के लिए बेन (नीचे देखें) के लिए धन्यवाद ताकि इसे फ़ॉर्म से सीधे एक्सेस/अपडेट नहीं किया जा सके। +1

+0

@xaver शेड विशेषता फ़ील्ड को सुरक्षित रखना सुनिश्चित करें ताकि यह किसी फ़ॉर्म के माध्यम से बड़े पैमाने पर अपडेट क्रियाओं द्वारा लिखित नहीं हो सके। – hurikhan77

+2

आप hurikhan77 के साथ मदद करने के लिए attr_protected का उपयोग कर सकते हैं। – Ben

24

फ़ील्ड नाम कहा जाता है तो

object.name_changed? 

सच वापस आ जाएगी।

+0

क्या यह हमेशा सच नहीं होगा? रेल डेटाबेस में एन्क्रिप्टेड मौजूदा पासवर्ड के साथ अद्यतन सादे टेक्स्ट पासवर्ड की तुलना करेंगे और वे हमेशा अलग होंगे (मुझे लगता है)। –

+0

@ फेरेल मैं _changed का उपयोग करें? हर समय और यह सही है। जवाब देने के लिए धन्यवाद। मेरे पास एक मॉडल है जो मूल रूप से आज है और यह एक अनुरोधकर्ता और एक असाइन करने वाला है। मैं सोच रहा था कि क्या असाइन करने वाले को समान रूप से ऐसा करने का कोई तरीका है? – KevinM

+0

आप सभी बदले गए फ़ील्ड के साथ ऐरे प्राप्त करने के लिए 'object.changed' का भी उपयोग कर सकते हैं – Carpetsmoker

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