10

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

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

这是生成的html

<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>

即使我这样做,条件也保持不变:

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}
4

5 回答 5

20

这就是我最终所做的:

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 。我可以在数据库中看到。无论如何,这行代码有效。

如果有人可以解释,我将非常感谢!

于 2012-04-20T04:49:42.747 回答
6

如果你使用 collection_select 助手,语法很简单:

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

我希望这有帮助

于 2017-02-11T13:57:08.253 回答
2
<% form_for(@company) do |f| %>
   <%= f.select(:company_status_id, ListCache.all.map {|lc| [lc.name, lc.id]} ) %>
<% end %>
于 2012-04-19T13:24:18.563 回答
1

有时您只需要转到浏览器地址栏并按回车即可。单击刷新按钮正常重新加载页面无济于事。我的问题就这样解决了。

于 2018-07-31T04:18:25.780 回答
0

改用 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%>

希望这对你有帮助......

于 2012-04-19T10:48:27.307 回答