在我们的rails 3.1.0应用中有询价,报价和test_item。询价有很多报价和测试项目。报价属于询价,有多个测试项目。测试项目有很多询价和报价。
创建报价时,rfq中的测试项目将直接传递到报价新表单中。下面是新的引号控制器中的代码:
@quote = @rfq.quotes.new()
@quote.test_items << @rfq.test_items以下是引用新表单中的视图代码,用于显示从rfq传递的测试项目:
<%= simple_form_for([@rfq, @quote]) do |f| %>
....
<% @quote.test_items.each do |t| %>
<p><%= f.association :test_items, :label => false %><%= link_to_remove_fields "remove", f %></p>
<% end %>
....
<% end %> 上面的视图代码可以显示从rfq传递过来的测试项,并维护关联(quote有许多测试项),这是应用程序所需要的。但是,它还显示了此处不需要的测试项目的选择框(除了删除,不能更改报价中的测试项目。循环中的t也没有用)。我们只需要显示测试项目的名称,维护关联(quote有许多测试项目),并允许删除测试项目(由link_to_remove_fields完成)。
有没有一种干净利落的方法来实现这一点?非常感谢。
发布于 2012-02-02 08:59:37
看看Rails中的嵌套属性机制。它既需要模型声明,也需要accepts_nested_attributes_for,并受fields_for表单助手支持,这些助手也与simple_ form的simple_fields_for兼容。
我认为您的错误在于您显式地循环遍历test_items并调用f.assocation,这会告诉表单您想要选择一个不同的test_item。我认为您要做的是让用户通过复选框删除test_items。您将需要使用fields_for隐式循环遍历test_items列表,并使用nested_attributes允许删除。
https://stackoverflow.com/questions/9101480
复制相似问题