2009-07-28 17 views
9

Pregunta realmente simple: ¿cómo utilizo Select (ActionView :: Helpers :: FormOptionsHelper) con opciones agrupadas?Agrupar Seleccionar en Rails

Lo tengo trabajando con un select_tag (ActionView :: Helpers :: FormTagHelper) pero me gustaría tenerlo usando una etiqueta de selección para que coincida con el resto del formulario. es posible?

Mis opciones de aspecto:

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

mientras mi punto de vista es actualmente:

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

Respuesta

22

Editar

corrección, ya que está utilizando matrices que necesita grouped_options_for_select

E jemplo:

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) 

Imprime el siguiente:

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

Tenga en cuenta que tiene que proporcionar su propia seleccione etiquetas para terminar con esto. No hay que seleccione la función que hará la agrupación por usted, solo este método.

Debería superar su reticencia. El Camino rieles (tm) para hacer lo que se pide es utilizar select_tag con grouped_options_for_select:

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

Esto es lo que sucede cuando se va fuera de lo común con los rieles. :)

Aquí hay una referencia que acabo de encontrar en Google:

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

+0

¿Tiene un ejemplo de esto en la práctica? Vi esto en los documentos, pero no puedo entender cómo hacerlo funcionar. –

+0

@Neil: ver arriba – hobodave

+1

Esto también está bien, excepto que no funciona con una selección tradicional. Soy reticente a usar select_tag, y significa que necesito tratar de encontrar el nombre del elemento sobre la marcha. –

6

También puede utilizar un hash en lugar de matrices anidadas:

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


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

Aquí, también hay una opción seleccionada ('Dinamarca')

Cuestiones relacionadas