谷歌搜索的搜索结果太多了,甚至在搜索结果中都有问题 - 但到目前为止讨论的解决方案对我没有帮助。问题出在这里:我有一个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}
这是生成的htmnl
<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}
答案 0 :(得分: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。我可以在db中看到。无论如何,这行代码工作正常。
如果有人可以进行宣传,我将非常感激!
答案 1 :(得分:5)
如果使用collection_select助手,语法非常简单:
<%= f.collection_select :category_id, Category.all, :id, :name,
prompt: true, selected: @product.category_id %>
我希望这个帮助
答案 2 :(得分:2)
<% form_for(@company) do |f| %>
<%= f.select(:company_status_id, ListCache.all.map {|lc| [lc.name, lc.id]} ) %>
<% end %>
答案 3 :(得分: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%>
希望这能帮到你......
答案 4 :(得分:0)
有时,您只需要转到浏览器地址栏,然后按Enter。单击刷新按钮以正常方式重新加载页面无济于事。我的问题就这样解决了。