2013-09-27 6 views
7

क्यों सरल_फॉर्म बूलियन फ़ील्ड के लिए इनपुट टैग दो बार उत्पन्न करता है (एक छुपा हुआ और दूसरा नहीं)?Simple_form: क्यों एक के बजाय दो इनपुट टैग उत्पन्न होते हैं?

मेरी simple_form में, मैं यह है:

<%= form.input :over_phone, as: :boolean, input_html: {checked: true} %>

जो इस उत्पन्न करता है:

<div class="control-group boolean optional order_over_phone"> 
    <label class="boolean optional control-label" for="order_over_phone">Order over phone</label> 
    <div class="controls"> 
    <input name="order[over_phone]" type="hidden" value="0"> 
    <label class="checkbox"> 
     <input checked="checked" class="boolean optional" id="order_over_phone" name="order[over_phone]" type="checkbox" value="1"> 
    </label> 
    </div> 
</div> 

आप देख सकते हैं, एक इनपुट टैग 0 मान और अन्य के साथ छिपा हुआ है 1 के मान से अनदेखा है, यदि मैं फॉर्म जमा करता हूं, तो पोस्ट पैरामीटर में मुझे दोनों मान मिलते हैं:

order[over_phone]:0 
order[over_phone]:1 

मेरे पास इस बुलियन क्षेत्र से जुड़े मॉडल निर्माण में कुछ यादृच्छिक व्यवहार है, इसलिए मुझे आश्चर्य है कि यह simple_form के कारण होता है। यह गैर-बूलियन फ़ील्ड प्रकारों के साथ नहीं होता है।

यदि आप एक ही समस्या में आ गए हैं, तो कृपया अपना अनुभव साझा करें।

मैं simple_form 2.1.0 का उपयोग कर रहा हूं।

उत्तर

8

check_box पकड़ लिया

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-check_box

HTML विनिर्देश कहते अनियंत्रित चेक बॉक्स सफल नहीं हैं, और इस तरह वेब ब्राउज़र उन्हें नहीं भेजते हैं। दुर्भाग्य से यह एक गॉचा पेश करता है: यदि चालान मॉडल का भुगतान किया गया ध्वज होता है, और उस रूप में जो भुगतान किए गए चालान को संपादित करता है तो उपयोगकर्ता अपने चेक बॉक्स को अनचेक करता है, कोई भुगतान पैरामीटर नहीं भेजा जाता है। तो,

@invoice.update(params[:invoice]) 

ध्वज को अपडेट नहीं करेगा, तो कोई भी बड़े-असाइनमेंट मुहावरे।

इसे रोकने के लिए हेल्पर बहुत चेक बॉक्स से पहले सहायक छुपा क्षेत्र उत्पन्न करता है। छिपे हुए क्षेत्र का एक ही नाम है और इसकी विशेषताएँ एक अनचेक चेक बॉक्स की नकल करती हैं।

इस प्रकार, ग्राहक या तो केवल छिपा हुआ क्षेत्र (चेक बॉक्स का प्रतिनिधित्व करता है अनचेक किया गया है), या दोनों फ़ील्ड भेजता है। चूंकि एचटीएमएल विनिर्देश कहता है कि कुंजी/वैल्यू जोड़े को उसी क्रम में भेजा जाना चाहिए, वे फॉर्म में दिखाई देते हैं, और पैरामीटर निष्कर्षण क्वेरी स्ट्रिंग में किसी भी दोहराई गई कुंजी की अंतिम घटना होती है, जो सामान्य रूपों के लिए काम करता है।

+0

बहुत बहुत धन्यवाद! यह बताता है। मैंने अभी सोचा, "ओवर_फोन" फ़ील्ड के साथ मेरी समस्या कहीं और थी। – Nurbo

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