f.collection_select不显示所选值

这个搜索在谷歌上有这么多的结果,它甚至在SO上被问到 – 但到目前为止讨论的解决方案对我没有帮助。 这是问题:我有一个form_for @company |f| 我正在为company_status_id使用f.collection_select – 但是当表单加载时,如果设置了,我希望选择实际的公司状态。 通过我知道的调试器,它已被设置,但我在那里显示默认值。 这是代码:

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

这是生成的htmnl

  -Not Available- Active Bankrupt Acquired  

即使我这样做,条件仍然相同:

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

要么

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

这就是我最终做的事情:

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

我读了一个类似问题的答案,即collection_select通过比较传递的内容与集合的属性来自动选择所选的值。 显然他们的类型有所不同,并将CompanyStatus中的int与@ company.company_status_id.to_i的int进行比较。 虽然@ company.company_status_id也应该是int。 我可以在db中看到。 无论如何,这行代码工作正常。

如果有人可以扩张,我将非常感激!

如果使用collection_select helper,语法非常简单:

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

我希望这有帮助

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

请改用select_tag

  <%= form_for(@product, :html => {:multipart => true}) do |f| %> <%= select_tag("product[category_id]", options_for_select(@categories.map { |cat| [cat.name, cat.id] })) %> <%end%> 

希望这能帮到你……

有时您只需要转到浏览器地址栏并按Enter键。 正常重新加载页面单击刷新按钮没有帮助。 我的问题就这样解决了。