f.collection_select不显示所选值

时间:2012-04-19 10:41:16

标签: ruby-on-rails ruby

谷歌搜索的搜索结果太多了,甚至在搜索结果中都有问题 - 但到目前为止讨论的解决方案对我没有帮助。问题出在这里:我有一个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}

5 个答案:

答案 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。单击刷新按钮以正常方式重新加载页面无济于事。我的问题就这样解决了。