2011-02-01 7 views
41

में एक से अधिक चयन मेरे पास है मेरे रूप में सलेक्ट बॉक्स निम्नलिखित:रूबी - f.select

Related Type: &nbsp; <%= f.select(:TYPE, [['Type A', 'Type A'], 
            ['Type B', 'Type B'], 
            ['Type C', 'Type C'], 
            ['Type D', 'Type D'], 
            ['Type E', 'Type E'] 
           ],{ :prompt => "Please select"} 
           ) %> 

मैं एकाधिक चयन बनाने के लिए और भी चयन बॉक्स के आकार बनाने के लिए उपयोगकर्ता की अनुमति देना चाहते 5.

कैसे करना है इसके बाद के संस्करण कोड के लिए है?

उत्तर

65

अपने { :prompt => "Please select"} जैसे एचटीएमएल विकल्पों के साथ एक और हैश जोड़ने के बाद

<%= f.select(:TYPE, [['Type A', 'Type A'], 
            ['Type B', 'Type B'], 
            ['Type C', 'Type C'], 
            ['Type D', 'Type D'], 
            ['Type E', 'Type E'] 
           ],{ :prompt => "Please select"}, 
            { :multiple => true, :size => 5 } 
           ) %> 

बार जब आप इस किया है आप अपने :prompt विकल्प स्थानांतरित करने के लिए चाहते हो सकता है (रखने के खाली {} हालांकि ताकि एचटीएमएल विशेषताओं रेल विकल्प के रूप में इलाज नहीं मिलता।)

इसके अलावा, आप की आवश्यकता होगी यह सुनिश्चित करने के लिए कि आपका कंट्रोलर कोड सही ढंग से स्वीकार कर रहा है और कई मानों को संभाला जा रहा है।

+6

ऐसा क्यों जोड़ता है में मदद करता है "---" और "-" हर गैर चयनित विकल्प है कि में संग्रह किया गया है के लिए: प्रकार? –

+0

जब मैं इसे फॉर्म में सहेजता हूं तो यह स्थिति 0 "आईडी" => [[0] "", [1] "some_id"] –

8

संग्रह के मामले में, कोशिश

<%= f.select(:TYPE, Categories.collect {|p| [ p.name, p.id ] }, 
              { :prompt => "Please select"}, 
              { :multiple => true, :size => 5 }) %> 
+1

पर यह अतिरिक्त खाली "" लेता है, यह 'category.all' नहीं होना चाहिए। collect'? –

0

{: शीघ्र => "कृपया चुनें"}, {: एकाधिक => true,: आकार => 5} {} महत्वपूर्ण है जब f.select

6

मैं (वस्तु को संपादित करते समय प्रारंभिक चुनाव सहित) एक पूरी तरह से काम कर रहे उदाहरण है, जब:

  • Object माना वस्तु
  • हैसंबंधों के लिए महत्वपूर्ण है, और एक string

रूप में है:

form_for(@object) do |f| 
    = f.select :similar_ids, options_from_collection_for_select(Object.all, :id, :name, {:selected => @object.similar_ids.split(';')}), {}, {:multiple => true, :size => 4, :name => 'object[similar_ids][]'} 

और Object.rb मॉडल में:

class Object < ActiveRecord::Base 
    before_save :handle_similars 

    def handle_similars 
    self.similar_ids = self.similar_ids.select(&:present?).join(';') 
    # .select(&:present?) is necessary to avoid empty objects to be stored 
    end 

    def similars 
    self.class.find(self.similar_ids.split(';')) 
    end 

end 

इन पदों मेरी मदद की:

आशा है कि यह

+0

यह महत्वपूर्ण है कि नाम '[]' में समाप्त हो जाए ताकि रेल पैरों को मानों की सरणी के रूप में व्याख्या करे – Josh