2009-07-28 17 views
9

Proste pytanie - jak używać opcji select (ActionView :: Helpers :: FormOptionsHelper) z opcjami zgrupowanymi?Zgrupowane Wybierz w Railsach

Mam to działa z select_tag (ActionView :: Helpers :: FormTagHelper), ale naprawdę chciałbym mieć go za pomocą znacznika select, aby dopasować do reszty formularza. czy to możliwe?

Moje opcje wyglądać następująco:

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

podczas gdy mój pogląd jest obecnie:

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

Odpowiedz

22

Edit

korekcji, ponieważ używasz tablic trzeba 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) 

Drukuje następujące:

<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> 

Zauważ, że musisz dostarczyć swój własny wybrać tagów zawinąć to. Nie ma funkcji, która będzie grupować dla ciebie, tylko ta metoda.

Powinieneś przełamać swoją powściągliwość. Szyny Way (tm), aby robić to, co pytasz jest użycie select_tag z grouped_options_for_select:

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

To co się dzieje, gdy idziesz na uboczu drogi z szynami. :)

Oto odniesienie Właśnie znalazłem na google:

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

+0

Czy masz na to przykład w praktyce? Widziałem to w dokumentach, ale nie wiem, jak to działa. –

+0

@Neil: patrz wyżej – hobodave

+1

Jest to również w porządku, z tym wyjątkiem, że nie działa z tradycyjnym wyborem. Nie chcę używać select_tag, a to oznacza, że ​​muszę wypróbować nazwę elementu w locie. –

6

Można również użyć hash zamiast zagnieżdżonych tablic:

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


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

Tutaj znajduje się również wybrana opcja ("Dania")

Powiązane problemy