2011-01-31 7 views
12

Supongamos que estoy consultando una lista de fruta y luego solo recojo la identificación y el nombre de la fruta en @fruit.Seleccione la etiqueta, especificando la opción seleccionada (o moviendo un elemento de la matriz al índice 0)

[32, "apple"], 
[8, "bannana"], 
[10, "cantelope"], 
[11, "grape"], 
[15, "orange"], 
[41, "peach"], 
[22, "watermelon"] 

@fruit se está utilizando en un Ayudante de selección. "apple" en el índice 0 de @fruit será el valor seleccionado (primera opción) de la selección. Este es un ejemplo inventado, pero de manera predeterminada siempre sabré qué es "naranja" por nombre (no por id). Necesito que "naranja" sea el valor seleccionado de la etiqueta de selección (la primera opción).

": prompt => 'orange'" solo agrega una segunda instancia de "naranja" en la selección. Todo lo que he encontrado en Google hasta ahora parece ser acerca de agregar un valor extra o un espacio en blanco a la lista.

Dado que el índice 0 de la matriz siempre se convierte en el valor seleccionado (si no se utiliza ningún indicio o blanco en la ayuda de selección), ¿hay alguna manera de encontrar el índice que contenga el nombre "naranja" (@fruit [x] .name == 'orange'), y moverlo al índice 0 mientras conserva el alfa existente en el resto de la lista? Por lo tanto, la matriz @fruit se vería así:

@fruit[0] [15, "orange"], 
@fruit[1] [32, "apple"], 
@fruit[2] [8, "bannana"], 
@fruit[3] [10, "cantelope"], 
@fruit[4] [11, "grape"], 
@fruit[5] [41, "peach"], 
@fruit[6] [22, "watermelon"] 

Lo único que se me ocurre en este momento sería para recorrer @fruit y si "naranja" se encuentra agregarlo a una nueva matriz. A continuación, vuelva a iterar a través de la matriz @fruit y agregue cualquier cosa que no tenga un nombre de "naranja". No estoy seguro de cómo escribir eso, pero parece que haría lo que estoy buscando. Tal vez hay alguna forma fácil de hacer esto que me falta (¿especificar qué índice en una matriz es la primera opción escrita)?

¡Gracias!

Respuesta

16

Ver aquí: http://guides.rubyonrails.org/form_helpers.html#making-select-boxes-with-ease

Si utiliza los ayudantes existentes, se puede especificar por ID de la opción que desea seleccionar. Específicamente este ejemplo:

<%= options_for_select([['Lisbon', 1], ['Madrid', 2]], 2) %> 

output: 

<option value="1">Lisbon</option> 
<option value="2" selected="selected">Madrid</option> 

Usted dice que no sabe qué opción es "naranja" por ID. Si desea encontrar la ID para "naranja" en la matriz de fruta, esto lo haría, entonces puede usar el ayudante:

(@fruit.detect { |i| i[1] == 'orange' } || []).first 
+1

¡Gracias! El método de detección realmente ayudó a orientarme en la dirección correcta. Terminé teniendo problemas con el método de detección que coincide con el índice de sub-matriz 1 y que devuelve el índice 0 de la sub-matriz. Después de hacer otra pregunta sobre métodos de detección, terminé yendo con esto (encuentra la matriz secundaria que contiene 'naranja' y devuelve el último índice: <% = f.select: fruit_id, options_for_select (@fruit, @ fruit.assoc (' naranja). last)%> – Reno

+0

significaba '.first' perdón – Reno

11

Puede usar options_from_collection_for_select en la etiqueta de selección para seleccionar una opción predeterminada. Por ejemplo:

<%= select_tag 'state', 
    options_from_collection_for_select(@fruits, 'id', 'name', 15), 
    :include_blank => true %> 

Esto seleccionaría 'Naranja' por defecto. API Docs.

Cuestiones relacionadas