2011-03-04 10 views
30

मेरे पास एक ड्रॉप मेनू के साथ Rails3 एप्लिकेशन पर मेरी रूबी पर एक फॉर्म है, यह मेरा विकल्प है चुनिंदा विकल्प के लिए:रेल 3: f.select - options_for_select

<%= f.select :phone_type, options_for_select(["Select One", "Cell", "Work", "Office", "Home", "Other"],:disabled => ["Select One"]), :class => 'genForm_dropBox' %> 

मेरी समझ से यह डिफ़ॉल्ट विकल्प के रूप में "एक का चयन करें" होना चाहिए जब कोई खुलता है पृष्ठ, लेकिन यदि वे अन्य विकल्पों में से एक का चयन नहीं करते हैं तो वे सबमिट करते समय त्रुटि प्रदर्शित करते हैं।

सफारी और क्रोम और आईई 7 जैसे ब्राउज़र में यह सच है, लेकिन फ़ायरफ़ॉक्स और आईई 8 में यह "सेल" को पहला विकल्प के रूप में दिखाता है क्योंकि चयन वन अक्षम है।

मैं इसे डिफ़ॉल्ट रूप से "एक का चयन करें" प्रदर्शित करना चाहता हूं, लेकिन जब वे फ़ॉर्म जमा करते हैं तो इसे एक अनुपयोगी विकल्प के रूप में रखें। क्या मुझे इसे नियंत्रक, या मॉडल में स्क्रिप्ट करने की आवश्यकता है? या क्या मैंने इसे गलत रूप में कोड किया है?

उत्तर

29

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

<%= f.select :phone_type, options_for_select([["Select One", ""], "Cell", "Work", "Office", "Home", "Other"]), :class => 'genForm_dropBox' %> 
+3

मुझे लगता है कि तुम भी हो सकता था ': शीघ्र =>" का चयन करें एक "' या ': include_blank => चयन में" एक का चयन करें "' ठीक है, मुझे यकीन है कि नहीं कर रहा हूँ अगर यह काम करता है विकल्प_for_select के साथ – GiH

+0

': prompt => 'विकल्पों का चयन करके मेरे लिए काम नहीं किया है, लेकिन': include_blank => 'किया। – bigtex777

1

["एक चुनें", ""] संपादन स्क्रीन को संग्रहीत मूल्य के बजाय "एक का चयन करें" प्रदर्शित करने का कारण बनता है। रेल 3.1 (2012 अगस्त 17)

19

यह एक छोटे से क्लीनर है:

<%= f.select :phone_type, [ 'Cell', 'Work', 'Office', 'Home', 'Other' ], :prompt => 'Select One' %> 

: शीघ्र तर्क एक खाली मूल्य के साथ एक विकल्प उत्पन्न करता है।

+0

'प्रॉम्प्ट' के बारे में भी क्या अच्छा है यह है कि आपको केवल तब ही संकेत दिया जाता है जब आपने कुछ नहीं चुना है।अगर आप अपना फोन_टाइप संपादित करते हैं और आपके पास पहले से ही एक वैल्यू सेट था तो आप उन्हें केवल बदल सकते हैं, लेकिन इसे रिक्त स्थान पर सेट नहीं कर सकते :) – MMachinegun

10

रेल 4 में, यह दृष्टिकोण मेरे लिए अच्छा काम करता है।

<%= f.select :status, options_for_status, {}, prompt: 'Select One' %> 

इस बीच मैंने अपने विचार से अव्यवस्था को दूर रखने के लिए एक सहायक में विकल्पों को परिभाषित किया है।

def options_for_status 
    [ 
    ['First Option','first_option'], 
    ['Second Option','second_option'] 
    ] 
end 
3

उत्तर देने वाले सभी लोगों के लिए धन्यवाद।

मुझे उस परियोजना के लिए समान कोड की आवश्यकता है जिस पर मैं काम कर रहा हूं और मुझे वास्तव में रयान बर्नेट ने दृष्टिकोण पसंद किया।

रेलवे 4.1.0 का उपयोग करके मेरे लिए यह काम किया गया है।

<%= f.select :season, options_for_seasons, :prompt => 'Select One' %> 

फिर मैंने अपने सहायक में विकल्पों को परिभाषित किया।

def options_for_seasons 
    ['Spring', 'Summer', 'Autumn', 'Winter'] 
end 

मैं :prompt => 'Select One' साथ चला गया, क्योंकि मैं केवल "का चयन करें एक" विकल्प अगर एक मौसम पहले से चयनित नहीं किया गया था संपादित रूप में सूचीबद्ध होने के लिए करना चाहता था।

0

हो सकता है <%= f.select :phone_type, options_for_select(["Cell", "Work", "Office", "Home", "Other"]), :prompt => "Select One", :class => 'genForm_dropBox' %>