यहाँ है कोड का एक टुकड़ा मैं अब उपयोग कर रहा हूँ:रेल चयन सहायक - चयनित मान, कैसे डिफ़ॉल्ट?
<%= f.select :project_id, @project_select %>
कैसे उसके डिफ़ॉल्ट मान params[:pid]
करने के बराबर किया जाता, जब पेज लोड इसे संशोधित करने के लिए?
यहाँ है कोड का एक टुकड़ा मैं अब उपयोग कर रहा हूँ:रेल चयन सहायक - चयनित मान, कैसे डिफ़ॉल्ट?
<%= f.select :project_id, @project_select %>
कैसे उसके डिफ़ॉल्ट मान params[:pid]
करने के बराबर किया जाता, जब पेज लोड इसे संशोधित करने के लिए?
यह करना चाहिए:
<%= f.select :project_id, @project_select, :selected => params[:pid] %>
बिना पैरा के, 'options_for_select' बेहतर तरीका है। यह किसी भी स्थिति के लिए अच्छा है, फ़ॉर्म संपादन के लिए भी अच्छा है। –
यहां कुंजी है: अपने फ़ंक्शन पर देखें (options_for_select() बनाम f.select। याद रखें ये अलग-अलग फ़ंक्शन हैं। – FlyingV
यह आप के लिए काम करना चाहिए। यह सिर्फ html_options चर को {:value => params[:pid] }
गुजरता है।
<%= f.select :project_id, @project_select, {}, {:value => params[:pid] } %>
लेकिन यह चयन में उपयुक्त आइटम का चयन नहीं करेगा: एस – totocaster
मुझे समाधान मिला है और मैंने पाया कि मैं RoR में बहुत अनुभवहीन हूं।
नियंत्रक दृश्य का प्रबंधन करता है कि इसके बाद के संस्करण इस ऐड वर्णित के अंदर:
@work.project_id = params[:pid] unless params[:pid].nil?
यदि पैरामीटर [: पीआईडी] एक स्ट्रिंग है, जो अगर यह एक से आया है प्रपत्र, यह है, आपको शायद
params[:pid].to_i
चुनिंदा सूची में सही आइटम का चयन करने की आवश्यकता होगी
यह इंगित करने के लिए धन्यवाद –
यह मुझे भी बचाया। यिक्स रेल, यिक्स। – rogerdpack
इस उत्तर ने मुझे मेरी पहचान करने में मदद की मुद्दा। मेरा चयन बॉक्स गतिशील है और डेटाबेस से संग्रह खींच रहा है। मैं एक शीर्षक द्वारा डिफ़ॉल्ट चयन को पॉप्युलेट करने की कोशिश कर रहा था, आइटम की आईडी नहीं। इस जवाब ने मुझे उस समस्या को देखने में मदद की, और एक बार जब मैंने अपना '@ प्रोजेक्ट पॉप्युलेट किया 'शीर्षक के बजाय डेटाबेस तालिका से एक आईडी के साथ परिवर्तनीय, इस कोड को 'form.select' सहायक' के पीछे जोड़ा गया: 'चयनित: @ प्रोजेक्ट' धन्यवाद @ डैनेंगल –
वर्तमान उदाहरण की सही विशेषता का उपयोग करें (उदा। @work.project_id
):
<%= f.select :project_id, options_for_select(..., @work.project_id) %>
यह सबसे अच्छा जवाब है क्योंकि यह काम करता है 'select_tag' के साथ भी। धन्यवाद, यह वास्तव में भी मेरी मदद करता है। – stephenmurdoch
इसके अलावा आप 'options_for_select (..., f.object.project_id)' – 18augst
धन्यवाद कर सकते हैं धन्यवाद muc ज!अन्य सभी स्वीकृत उत्तर यह नहीं कहते कि वेरिएबल के माध्यम से कैसे चयन करें। –
रेल 3.0.9
select options_for_select([value1, value2, value3], default)
<%= f.select :project_id, @project_select, :selected => params[:pid] %>
इस प्रयास करें:
<%= f.select :project_id, @project_select, :selected => f.object.project_id %>
<%= f.select :project_id, options_from_collection_for_select(@project_select,) %>
इन उत्तरों के सभी के साथ समस्या यह है कि वे क्षेत्र के लिए सेट किया गया है डिफ़ॉल्ट मान भले ही आप अपने रिकॉर्ड को संपादित करने की कोशिश कर रहे हैं।
आपको डिफ़ॉल्ट को अपने मौजूदा मान पर सेट करने की आवश्यकता है और फिर केवल यदि आपके पास कोई मान नहीं है तो इसे वास्तविक डिफ़ॉल्ट पर सेट करें। इसलिए जैसा:
f.select :field, options_for_select(value_array, f.object.field || default_value)
किसी f.object.field
से परिचित नहीं के लिए आप हमेशा f.object
का उपयोग तो उस के अंत करने के लिए अपने क्षेत्र का नाम जोड़ें।
यह एक साफ समाधान है, और जैसा कि बताया गया है कि आप डिफ़ॉल्ट मान को केवल नए और वर्तमान मूल्य पर संपादित करना चाहते हैं। – count0
मैं जानता हूँ कि यह एक पुरानी धागा है, लेकिन किसी को भी यह देखने को मिल सकते के लिए, इस सवाल का जवाब भी 'select2' जे एस प्लगइन के साथ काम करता है। पूरी तरह से काम करता है यदि आप एक ही फॉर्म के साथ रिकॉर्ड बना रहे हैं या संपादित कर रहे हैं और चयन 2 का उपयोग कर रहे हैं, खासकर प्लेसहोल्डर टेक्स्ट के साथ। –
वैकल्पिक रूप से, आप नियंत्रक में project_id विशेषता सेट कर सकते हैं, क्योंकि f.select का पहला तर्क उस विशेष विशेषता को खींचता है।
यदि एफ ऑब्जेक्ट को मुद्रित करने का प्रयास करें, तो आप देखेंगे कि f.object है जिसे चयनित आइटम प्राप्त करने के लिए जांच की जा सकती है (सभी रेल संस्करण के लिए लागू> 2।3)
logger.warn("f #{f.object.inspect}")
तो
, निम्न स्क्रिप्ट का उपयोग उचित चयनित विकल्प प्राप्त करने के लिए:
:selected => f.object.your_field
इसके पहले से ही बताया गया है, एक उदाहरण
देने की कोशिश करेंगे चयन सूची रहने दो
select_list = { eligible: 1, ineligible: 0 }
तो निम्नलिखित कोड परिणाम
<%= f.select :to_vote, select_list %>
<select name="to_vote" id="to_vote">
<option value="1">eligible</option>
<option value="0">ineligible</option>
</select>
इसलिए डिफ़ॉल्ट रूप से चुने गए विकल्प को बनाने के लिए हमें का उपयोग करना होगा: मान।
<%= f.select :to_vote, select_list, selected: select_list.can_vote? ? 1 : 0 %>
यदि can_vote? सत्य देता है यह सेट करता है: 1 तो पहला मान दूसरा और चुना जाएगा।
select name="driver[bca_aw_eligible]" id="driver_bca_aw_eligible">
<option value="1">eligible</option>
<option selected="selected" value="0">ineligible</option>
</select>
अगर चयन के विकल्प ने फिर चयनित सिर्फ मान होगा के बजाय सिर्फ एक सरणी सूची हैं, उदाहरण के लिए चुने जाने की अगर
select_list = [ 'eligible', 'ineligible' ]
अब चयनित बस ले जाएगा
<%= f.select :to_vote, select_list, selected: 'ineligible' %>
मैं इसे काम करने के लिए नहीं मिला और पाया कि मुझे केवल "चयनित" HTML विशेषता को सही <option>
टैग पर जोड़ने की आवश्यकता नहीं है, लेकिन भी<select>
टैग पर। MDN's docs on the selected attribute of the select tag कहते हैं:
चयनित - बूलियन विशेषता इंगित करता है कि कोई विशिष्ट विकल्प शुरू में चुना जा सकता है।
इसका मतलब है कि कोड दिखना चाहिए: PROJECT_ID सेट नहीं है, या आप चाहते हैं:
f.select :project_id, options_for_select(@project_select, default_val), html: {selected: true}
मुझे यकीन है कि है कि क्या आप चाहते हैं एक डिफ़ॉल्ट परियोजना का चयन किया, जब पेज लोड, यदि नहीं कर रहा हूँ पैराम्स हैश में चयन के मूल्य को वापस करने के लिए: पिड। – Tilendor