8

के साथ टीओएस समझौते चेकबॉक्स जोड़ना हम अपने सदस्यों के लिए तैयार कर रहे हैं। हमने अपने सदस्य स्कीमा में एक tos_agreement फ़ील्ड (बूलियन) जोड़ा है, और हमने इसे views/devise/registrations/new.html.haml में जोड़ा है। - आप TOS को स्वीकार नहीं करते हैं, तो आप पंजीकृत नहीं कर सकताडेविस

validates_acceptance_of :tos_agreement, :allow_nil => false, 
    :accept => true 

यह ठीक काम करता है:

सदस्य मॉडल में, हम एक सत्यापन नियम इस प्रकार है।

हालांकि, समस्या आपकी सेटिंग्स को संपादित करने के साथ आता है। यदि आप /members/edit पर जाते हैं तो आपको वह फॉर्म मिलता है जहां आप अपना ईमेल पता या पासवर्ड बदल सकते हैं। टीओएस समझौते के लिए कोई क्षेत्र नहीं है क्योंकि इस बिंदु पर इसे बदलने योग्य नहीं होना चाहिए। हालांकि, जब आप कोई परिवर्तन करते हैं (उदाहरण के लिए अपना पासवर्ड बदलें) और फॉर्म जमा करें, तो यह एक त्रुटि संदेश देता है कि TOS अनुबंध गलत नहीं हो सकता है।

हम कैसे कह सकते हैं कि पहले पंजीकरण के बाद टीओएस समझौते को संशोधित करने का प्रयास कभी नहीं किया जा सकता?

संपादित करें: इसलिए मुझे लगता है कि मौलिक समस्या यह है कि हमारे पास हमारे attr_accessible में tos_agreement था, जो अब मुझे बहुत बुरा विचार था। लेकिन अगर हम इसे हटा देते हैं, तो हम पैरामीटर को स्वीकार करने के लिए डेविस को कैसे संशोधित करते हैं और इसके साथ कुछ करते हैं, भले ही यह बड़े पैमाने पर असाइन करने योग्य न हो?

+0

तुम भी वास्तव में इस प्रकार के लिए डेटाबेस में एक क्षेत्र बनाने की जरूरत नहीं है चर, रेल सिर्फ आपके लिए वर्चुअल फ़ील्ड बनाएंगे। http://guides.rubyonrails.org/active_record_validations.html#acceptance –

उत्तर

15

आप एक पारित कर सकते हैं: पर =>: सत्यापनकर्ता करने का विकल्प बनाने के इतना है कि यह केवल साइनअप पर जाँच की है:

validates_acceptance_of :tos_agreement, :allow_nil => false, :accept => true, :on => :create 
+1

इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए। यह बस मूल पोस्टर के सवाल का जवाब देता है। और वास्तव में ओपी ने मूल रूप से क्या पूछा। यदि परिस्थितियों को बाद में ओपी के लिए बदल दिया गया है, तो इसका मतलब उस व्यक्ति को श्रेय देना नहीं है जिसने आपके सटीक प्रश्न का उत्तर दिया है। – alybadawy