2012-04-19 20 views
9

Hay tantos resultados para esta búsqueda en Google, e incluso se solicita en SO, pero las soluciones discutidas hasta ahora no me ayudan. Este es el problema: tengo un form_for @company |f| y estoy usando f.collection_select para company_status_id - pero cuando se carga el formulario, quiero que se seleccione el estado actual de la compañía si está configurado. A través del depurador, sé que se ha configurado, pero estoy obteniendo un valor predeterminado que se muestra allí. Aquí está el código:f.collection_select que no muestra el valor seleccionado

= puts @company.company_status_id 
= f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value} 

Aquí está la htmnl generada

<select id="company_company_status_id" prompt="-Select-" name="company[company_status_id]"> 
<option value="1">-Not Available-</option> 
<option value="2">Active</option> 
<option value="3">Bankrupt</option> 
<option value="4">Acquired</option> 
</select> 

Y las condiciones siguen siendo los mismos, incluso si lo hago:

f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value, :selected => :selected => @company.company_status} 

O

f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value, :selected => @company.company_status} 
+0

A través de la declaración pone de allí, veo el company_status_id está establecido, pero no funciona correctamente. Estoy usando rails 2.3.11. [esta] respuesta (http://stackoverflow.com/a/1065359/878451) dice exactamente lo que quiero, y también lo que estoy haciendo, pero lo que no funciona. –

+0

esto debería funcionar. show @ company.company_status_id y ListCache.company_statuses – tokland

+0

¿Puedes publicar la definición de tu formulario ya que dependerá de lo que f.object sea? –

Respuesta

20

Esto es lo que finalmente hice:

f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value, :selected => @company.company_status_id.to_i} 

he leído en las respuestas en una pregunta similar que collection_select automáticamente selecciona el valor seleccionado haciendo comparaciones de lo que se pasa con los atributos de la colección. aparentemente había una diferencia de sus tipos, y comparar el int de CompanyStatus con el int de @ company.company_status_id.to_i funcionó. Aunque @ company.company_status_id se supone que también es int. Puedo ver eso en el db. De todos modos, esta línea de código funcionó.

Si alguien puede explicarlo, ¡le agradeceré mucho!

+1

Respuesta excelente bro. Genio. Aquí está mi voto favorable. –

+0

esto ayudó mucho gracias. – Batman

+0

Obviamente, no funcionará con Mongoid. –

0

Uso select_tag en su lugar

<%= form_for(@product, :html => {:multipart => true}) do |f| %> 


    <%= select_tag("product[category_id]", options_for_select(@categories.map { |cat| [cat.name, cat.id] })) %> 

    <%end%> 

Esperanza ayuda esto .....

+0

Si tuviera que usar eso con el objeto de formulario, f, ¿cómo se vería? ¿Te gusta? '<% = f.select (" nombre_modelo_del_modelo [id_stado_empresa] ", opciones_para_seleccionar (@ categories.map {| cat | [cat.name, cat.id]}))%>' –

2
<% form_for(@company) do |f| %> 
    <%= f.select(:company_status_id, ListCache.all.map {|lc| [lc.name, lc.id]}) %> 
<% end %> 
3

Si utiliza ayudante collection_select, la sintaxis es muy simple:

<%= f.collection_select :category_id, Category.all, :id, :name, 
         prompt: true, selected: @product.category_id %> 

espero que esto ayuda

+0

Esta es la única solución de trabajo. – prograils

Cuestiones relacionadas