f.collection_select不显示所选值

Saa*_*hah 10 ruby ruby-on-rails

这个搜索在谷歌上有这么多的结果,它甚至在SO上被问到 - 但到目前为止讨论的解决方案对我没有帮助.这里的问题:我有一个form_for @company |f|和我使用f.collection_selectcompany_status_id-但加载窗体时,我想实际的公司情况选择是否设置.通过我知道的调试器,它已被设置,但我在那里显示默认值.这是代码:

= puts @company.company_status_id
= f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value}
Run Code Online (Sandbox Code Playgroud)

这是生成的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>
Run Code Online (Sandbox Code Playgroud)

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

f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value, :selected => :selected => @company.company_status}
Run Code Online (Sandbox Code Playgroud)

要么

f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value, :selected => @company.company_status}
Run Code Online (Sandbox Code Playgroud)

Saa*_*hah 20

这就是我最终做的:

f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value, :selected => @company.company_status_id.to_i}
Run Code Online (Sandbox Code Playgroud)

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

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


Raf*_*Raf 5

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

<%= f.collection_select :category_id, Category.all, :id, :name,
                       prompt: true, selected: @product.category_id %>
Run Code Online (Sandbox Code Playgroud)

希望有帮助