Rails:创建失败后选择辅助值

时间:2010-12-07 09:54:32

标签: ruby-on-rails

我有一个嵌套的表单,例如:

<% form_for @invoice do |f| %>
 <%= render :partial => "invoice_item_fields", :locals => {:f => f} %>
<% end %>

和_invoice_items_fields:

<% f.fields_for :invoice_items do |builder| %>
 <%= link_to_remove_fields "remove", builder %>
 <%= builder.collection_select(:product_id, Product.all, :id, :name) %>
 <%= builder.text_field :quantity, :size => 4,%>
<% end %>

当我提交表单但未通过验证时,它会呈现新的表单 再次行动。该东西是选定的值:product_id是否 记得,但是:数量还可以。我读到我应该设置一个 控制器中的实例变量,具有所选的值 选项,然后执行以下操作:

<%= builder.collection_select(:product_id, Product.all, :id, :name,
:selected => @selected_product) %>

但问题是应用程序可能有很多:invoice_items,所以我 不知道该怎么做选择字段“记住”值。

感谢。

1 个答案:

答案 0 :(得分:0)

这类问题通常与产品的id是一个整数有关,但是表单构建器将其作为字符串进行比较的product_id。如果这就是问题,那么来自不美观但又有效的部门的解决办法是调用to_i:

builder.collection_select(builder.object.product_id.to_i, Product.all, :id, :name)

我希望看到更好的方法。

调试选择时经常麻烦的另一件事是,如果刷新页面,firefox会在突出显示的条目上留下一个选择 - 它不会再次查询HTML并选择现在应该选择的内容。这意味着如果您最初选择了错误的属性,然后更正代码并点击刷新,则您的浏览器实际上不会显示更改。