tag select_tag rails options_from_collection_for_select for empty ruby-on-rails

ruby-on-rails - select_tag - select() rails



Rails select helper-Valor seleccionado por defecto, ¿cómo? (14)

Aquí hay un fragmento de código que estoy usando ahora:

<%= f.select :project_id, @project_select %>

¿Cómo modificarlo para que su valor predeterminado sea igual a params[:pid] cuando se carga la página?


Alternativamente, puede establecer el atributo: project_id en el controlador, ya que el primer argumento de f.select extrae ese atributo en particular.


El problema con todas estas respuestas es que configuran el campo al valor predeterminado, incluso si está tratando de editar su registro.

Debe establecer el valor predeterminado para su valor existente y luego solo establecerlo en el valor predeterminado real si no tiene un valor. Al igual que:

f.select :field, options_for_select(value_array, f.object.field || default_value)

Para cualquiera que no esté familiarizado con f.object.field , siempre usa f.object luego agrega tu nombre de campo al final de eso.


Encontré una solución y descubrí que no tengo mucha experiencia en RoR.

Dentro del controlador que administra la vista descrita arriba, agregue esto:

@work.project_id = params[:pid] unless params[:pid].nil?


Esto debería funcionar para ti. Simplemente pasa {:value => params[:pid] } a la variable html_options.

<%= f.select :project_id, @project_select, {}, {:value => params[:pid] } %>


Esto debería hacerlo:

<%= f.select :project_id, @project_select, :selected => params[:pid] %>


No pude hacer que esto funcionara y descubrí que necesitaba agregar el atributo html "seleccionado" no solo a la etiqueta correcta <option> sino también a la etiqueta <select> . Los documentos de MDN sobre el atributo seleccionado de la etiqueta de selección dicen:

seleccionado - El atributo booleano indica que una opción específica se puede seleccionar inicialmente.

Eso significa que el código debería verse así:

f.select :project_id, options_for_select(@project_select, default_val), html: {selected: true}


Prueba esto:

<%= f.select :project_id, @project_select, :selected => f.object.project_id %>


Rails 3.0.9

select options_for_select([value1, value2, value3], default)


Si intenta imprimir el objeto f, verá que hay un objeto que se puede sondear para obtener el elemento seleccionado (aplicable a todas las versiones de los raíles> 2.3)

logger.warn("f #{f.object.inspect}")

entonces, use la siguiente secuencia de comandos para obtener la opción correcta seleccionada:

:selected => f.object.your_field


Utilice el atributo correcto de la instancia actual (por ejemplo, @work.project_id ):

<%= f.select :project_id, options_for_select(..., @work.project_id) %>


Ya explicado, trataremos de dar un ejemplo

deja que la lista de selección sea

select_list = { eligible: 1, ineligible: 0 }

Entonces, el siguiente código da como resultado

<%= f.select :to_vote, select_list %> <select name="to_vote" id="to_vote"> <option value="1">eligible</option> <option value="0">ineligible</option> </select>

Entonces, para hacer una opción seleccionada por defecto, tenemos que usar selected: value .

<%= f.select :to_vote, select_list, selected: select_list.can_vote? ? 1 : 0 %>

si can_vote? devuelve verdadero que establece seleccionado: 1 luego se seleccionará el primer valor else segundo.

select name="driver[bca_aw_eligible]" id="driver_bca_aw_eligible"> <option value="1">eligible</option> <option selected="selected" value="0">ineligible</option> </select>

si las opciones de selección son solo una lista de matriz en lugar de hast, entonces el seleccionado será solo el valor que se seleccionará, por ejemplo, si

select_list = [ ''eligible'', ''ineligible'' ]

ahora el seleccionado solo tomará

<%= f.select :to_vote, select_list, selected: ''ineligible'' %>


if params [: pid] es una cadena, que si proviene de un formulario, es probable que tenga que usar

params[:pid].to_i

para que el artículo correcto sea seleccionado en la lista de selección


<%= f.select :project_id, @project_select, :selected => params[:pid] %>


<%= f.select :project_id, options_from_collection_for_select(@project_select,) %>