2009-07-28 10 views
9

Domanda semplice in realtà - come utilizzare la selezione (ActionView :: Helpers :: FormOptionsHelper) con le opzioni raggruppate?Raggruppati Seleziona in Rails

Ho funzionato con un select_tag (ActionView :: Helpers :: FormTagHelper), ma mi piacerebbe davvero che fosse usando un tag select per abbinare il resto del modulo. È possibile?

Opzioni per il mio aspetto:

[ 
    ['Group 1', ["Item 1", "Item 2", "Item 3"]], 
    ['Group 2',["Item 1", "Item 2", "Item 3", "Item 4"]] 
] 

mentre il mio punto di vista è attualmente:

%tr#expense 
    %td 
    = f.text_field :value 
    = f.hidden_field :type, :value => mode 

risposta

22

Modifica

correzione, dal momento che si sta utilizzando le matrici avrete bisogno grouped_options_for_select

E xample:

grouped_options = [ 
    ['Group 1', 
    ["Item 1", "Item 2", "Item 3"]], 
    ['Group 2', 
    ["Item 1", "Item 2", "Item 3", "Item 4"]] 
] 
grouped_options_for_select(grouped_options) 

Stampa il seguente:

<optgroup label="Group 1"> 
    <option value="Item 1">Item 1</option> 
    <option value="Item 2">Item 2</option> 
    <option value="Item 3">Item 3</option> 
</optgroup> 
<optgroup label="Group 2"> 
    <option value="Item 1">Item 1</option> 
    <option value="Item 2">Item 2</option> 
    <option value="Item 3">Item 3</option> 
    <option value="Item 4">Item 4</option> 
</optgroup> 

Si noti che è necessario fornire il proprio selezionare tag per avvolgere questo. Non c'è la selezionare la funzione che farà il raggruppamento per te, solo questo metodo.

Si dovrebbe superare la vostra reticenza. La Via Rails (tm) per fare ciò che si chiede è quella di utilizzare select_tag con grouped_options_for_select:

<%= select_tag "foo[bar]", 
grouped_options_for_select(@bars) %> 

Questo è ciò che accade quando si va fuori dai sentieri battuti con Rails. :)

Ecco un riferimento che ho appena trovato su google:

http://www.ruby-forum.com/topic/185407

+0

Avete un esempio di questo in pratica? Ho visto questo nei documenti, ma non riesco a capire come farlo funzionare. –

+0

@Neil: vedere sopra – hobodave

+1

Questo va bene, tranne che non funziona con una selezione tradizionale. Sono reticente ad usare select_tag, e significa che ho bisogno di provare e capire il nome dell'elemento al volo. –

6

È possibile anche utilizzare un hash invece di matrici nidificate:

grouped_options = { 
'North America' => [['United States','US'], 'Canada'], 
'Europe' => ['Denmark','Germany','France'] 
} 


<%= select_tag "foo[bar]", 
grouped_options_for_select(grouped_options, 'Denmark') %> 

Qui, c'è anche un'opzione selezionata ('Danimarca')

Problemi correlati