2009-04-17 4 views
11

Tengo una colección seleccionar el siguiente aspecto:¿La selección de colección de Ruby Rails está mostrando el valor "prompt" en blanco?

<%= f.collection_select :region_id, Region.find(:all), :id, :name, { :prompt => 'Select a State/Province' }, :style => "width: 200px;" %> 

veces el símbolo de la: aparece opción de mensaje, pero a veces no lo hace. ¿Alguien sabe dónde podría comenzar a solucionar este problema? Tal vez he estado mirando demasiado tiempo ...

+0

Solo para aclarar: ¿está diciendo que el código exacto anterior algunas veces funciona y otras veces no, o que tiene dos selecciones de colección con código similar uno funciona y el otro no? –

Respuesta

-1

En lugar de

:prompt => "Select a State/Province" 

tratar

:allow_blank => "Select a State/Province" 

EDIT: Si después de comprobar la API puedo ver que lo tenía confundido, inmediata es la forma correcta de acuerdo con la documentación, ¿podría ser que solo a veces aparece porque su objeto ya tiene un valor y, por lo tanto, el prompt está ahí pero no es el valor actualmente seleccionado en la lista desplegable?

+0

gracias por verificar. sin embargo, el aviso ni siquiera aparece en la lista cuando hay un valor seleccionado. es inexistente. por ahora, lo he pirateado en JS, pero estoy un poco confundido sobre lo que está pasando ... – Tony

+0

Es ': include_blank'. http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html – Chloe

43

:include_blank con el valor de su opción en blanco parece hacer el truco. Pruebe esto:

{:include_blank => "Please select"} 
+1

esta debería ser la respuesta aceptada (Rails 3.2.6) –

+1

Solo tengo que tener en cuenta que esto no respetará la cadena que se pasa a ' include_blank' si está utilizando el método 'select_tag'. En su lugar, use 'prompt'. –

2

He estado teniendo el mismo problema. El uso de 'prompt' parece crear un atributo para la etiqueta de selección, el problema es que no hay tal atributo que yo sepa. Además, no es claramente lo que se describe en los documentos de Rails http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-options_from_collection_for_select.

Usar include_blank parece una buena solución para mí.

Cheers, Robin.

+0

Si está creando atributos, entonces debe rodear el indicador con llaves, como '{prompt: true}'.Esto separa el hash de opciones para el método de ayuda Rails del hash de atributos para el elemento HTML. Solo el último parámetro hash de un método puede ir sin llaves. – Chloe

11

:prompt aparece en la lista cuando no hay un valor seleccionado.

:include_blank aparece siempre en la lista, incluso si ha cargado la selección con un valor seleccionado.


si desea que su selecto tener siempre "Select a State/Province" como la primera opción:

<%= f.collection_select :region_id, Region.all, :id, :name, include_blank: 'Select a State/Province' %> 

si desea que su colección tiene "Select a State/Province" como la primera opción sólo cuando no se ha seleccionado una región:

<%= f.collection_select :region_id, Region.all, :id, :name, prompt: 'Select a State/Province' %> 

fuente: http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html

+1

': prompt' también aparece siempre, pero no está seleccionado en la carga de la página, si hay un valor seleccionado. –

+0

@AlexPopov No creo que eso sea cierto. Parece que si su objeto tiene un valor para, en este caso, 'region_id' cuando se carga el formulario, el valor de solicitud no estará allí, mientras que' include_blank' estará allí. –

+0

@JoshPinter Estoy viendo el mismo problema: incluso después de seleccionar otro valor, el valor de solicitud sigue siendo una opción seleccionable. –

0

intente esto <%= f.collection_select :region_id, Region.all, :id, :name, {prompt: 'Select a State/Province'}, {class: "form-control"} %>

+2

Hola y bienvenidos a SO. En el futuro, agregue información adicional al responder preguntas para que OP y otros en el futuro puedan comprender mejor su solución – Deepend

Cuestiones relacionadas