2010-12-29 2 views
33
<%= select_tag(:services, 
         options_from_collection_for_select(Service.all, :id, :name))%> 

और यह सभी सेवाओं को प्रदर्शित करता है ...रेल पर रूबी: मैं select_tag में डिफ़ॉल्ट प्लेसहोल्डर चीज़ का उपयोग कैसे करूं?

लेकिन मैं इसे होने के लिए कुछ की तरह हैं:

Select a service 
Service1 
Service2 
Service3 
Service4 

उत्तर

12
<%= select_tag(:services, 
       Service.all.collect { |c| [c.id, c.name] }. 
       insert(0, "Select a Service"))%> 

के रूप में प्रश्न के लिए उत्तर दिया, इस रेल 2.3 के लिए है। रेल 3 के लिए, प्रथन थानानार्ट के जवाब देखें।

139

अधिकांश समय, आप सरणी सीधे करने के लिए कुछ भी संलग्न नहीं करना चाहते हैं, या तो के इन एक क्लीनर समाधान है:

  • उपयोग :prompt => "Placeholder" यदि आप दिखाने के लिए केवल जब विशेषता समय प्रपत्र प्रदान की गई है पर नहीं के बराबर है प्लेसहोल्डर चाहते हैं। इसे डिफ़ॉल्ट रूप से चुना जाएगा, लेकिन यदि उपयोगकर्ता सबमिट करता है तो कुछ भी सहेजा नहीं जाएगा। यदि विशेषता पहले से ही आबादी है [संभवतः क्योंकि ए) एक डिफ़ॉल्ट मान है या बी) यह एक संपादन फ़ॉर्म है], प्लेसहोल्डर आइटम पूरी तरह से सूची से छोड़ा जाएगा।
  • :include_blank => "Placeholder" का उपयोग करें यदि आप प्लेसहोल्डर को प्रतिपादित सूची में हर समय शामिल करना चाहते हैं।
+0

पूरी तरह से सहमत हैं। चिह्नित उत्तर काम करता है लेकिन बहुत हैकी है। यह वही करने का विकल्प है जो आप चाहते हैं। संपादित करें: बस देखा कि मूल जवाब 2.3 के लिए था। फिर भी, मैं दोनों उत्तरों को गठबंधन करता हूं। –

+3

'प्रॉम्प्ट' मेरे लिए काम नहीं कर रहा है – Uko

+0

यदि आप ऐसा करते हैं: include_blank: true -it खाली खाली डालेंगे। – mjnissim

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