2010-12-07 41 views
1

我有一个嵌套的表格,如选择辅助值Rails的:失败后,创建

<% 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,所以我 唐不知道如何选择字段“记住”这些值。

谢谢。

+0

你看过这个例子(不完全一样,但..):http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_select。另外,你可以发表评论与生成的HTML(只有选择)。我敢打赌,你对collection_select的使用是错误的。通过验证时,它是否将所选产品的记录保存在数据库中? – 2010-12-07 10:27:17

+0

嗨,你可以显示你的控制器代码,请问?如果你的页面有@invoice的许多表单(或者任何其他具有嵌套字段的对象),你如何处理请求? – Bohdan 2010-12-07 10:40:20

回答

0

这类问题通常与产品的id是一个整数有关,但与表单构建器比较的product_id是字符串。如果是这样的问题,来自未美丽,但是,它-工程部门的解决办法是拨打to_i:

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

我很乐意看到这样做的更好的方式。

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