2010-02-03 23 views
32

Estoy tratando de tener un cuadro de selección múltiple. El cuadro de selección contendrá todas las tiendas en el DB, pero se seleccionarán aquellas a las que pertenece el usuario.rieles etiqueta de selección con valores múltiples pre seleccionados

Estoy a mitad de camino allí. Obtuve un cuadro de selección que tiene todas las tiendas en la base de datos. No puedo seleccionar aquellos a los que pertenece el usuario.

Tengo el siguiente:

<%= select_tag 'stores[]', options_for_select(@stores.map {|s| [s.store_name, s.store_id]}, 
:selected => @user.stores.map {|j| [j.store_name, j.store_id]}), :multiple => true, :size => 
10 %> 

Tengo un mapa con las tiendas que pertenece un usuario. se encuentra en:

@user.stores 

Respuesta

49

después de una buena cantidad de ensayo y error La siguiente trabajó para mí:

<%=select_tag 'stores[]', options_for_select(
@stores.map {|s| [s.store_name, s.store_id]}, 
@user.stores.pluck(:id) 
), :multiple => true, :size => 10%> 
+4

FYi, solo un pequeño espacio/agradable Ruby: puede acortar la opción seleccionada de @ user.stores.map {| j | j.store_id} to @ user.stores.map (&: store_id) – Squadrons

+1

Gracias, hermano! Pero creo que puedes usar '@ user.store_ids' en lugar de' desplumar' –

11

Otra forma de hacer esto sería usar el método options_from_collection_for_select ayudante. Se verá más o menos así:

<%= select_tag 'stores[]', options_from_collection_for_select(@stores, :store_id, :store_name, [4,5,6]), multiple: true, size: '10%' %> 
+0

No sé si esto estaba disponible cuando se hizo la pregunta, pero esta debería ser la respuesta aprobada de la OMI. – gosukiwi

+1

Encontré que el nombre y la identificación tenían que ser revertidos .. –

+0

Mi placer @yagudaev. Me decepcionó que la lista de entradas seleccionadas requiera identificadores y que: store_id no se pueda aplicar a ella :( –

Cuestiones relacionadas