Pregunta

Estoy tratando de obtener el ActionView-Helper collection_select para tomar un valor que se preseleccionará en el menú desplegable.

Ninguno (: seleccionado en html-option-hash)

<%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {}, {:selected => @my_collection_object.id}) %>

nor (: seleccionado en la opción-hash)

<%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {:selected => @my_collection_object.id}, {}) %>

parece funcionar.

¿Qué estoy haciendo mal? ¿Alguien me puede ayudar en este?

¿Fue útil?

Solución

Del documentos :

Ejemplo de uso (seleccionando el Autor asociado para una instancia de Publicar , @post ):

collection_select(:post, :author_id, Author.all, :id, :name_with_initial)

Si @ post.author_id ya es 1, esto devolvería:

<select name="post[author_id]">
  <option value="">Please select</option>
  <option value="1" selected="selected">D. Heinemeier Hansson</option>
  <option value="2">D. Thomas</option>
  <option value="3">M. Clark</option>
</select>

Por lo tanto, solo debe asegurarse de que @ my_object.my_method devuelva un valor que coincida con uno de los valores de opción disponibles. Si hay una coincidencia, se seleccionará esa opción.

Otros consejos

De acuerdo con el docs , if @ my_object.my_method tiene el mismo valor que una de las opciones, esa se seleccionará de forma predeterminada.

Por el contrario, puede intentar usar options_from_collection_for_select junto con select_tag :

<%= select_tag 'my_object[my_method]', options_from_collection_for_select(@my_collection, :id, :description_string, @my_collection_object.id) %>

Use :selected_value

%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {}, {:selected_value => @my_collection_object.id}) %>

Verifique si @ my_object.my_method devuelve nil. Si es así,

  

Si el método de llamada devuelve nil, no se realiza ninguna selección sin incluir: prompt o: include_blank en el hash de opciones.

Aparte de eso, puedes intentar usar lambda, como en el ejemplo de rdoc

{:disabled => lambda {|category| category.archived? }

En su caso, esto se verá

{:selected => lambda {|obj| obj.id == @my_collection_object.id }}

También funciona si su colección tiene la forma de una matriz de matrices de 2 valores:

CURRENCIES = [["USD", "<*>quot;], ["BRL", "R<*>quot;]]

<%= collection_select :thing, :currency, CURRENCIES, :first, :last %>

El truco : first y : last funciona bastante bien para estas cosas, sin tener que definir un modelo separado para ellas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top