0

我们的rails 3.1.0应用程序中有rfq,quote和test_item。询价有许多报价和测试项目。报价属于rfq,并有许多测试项目。测试项目有许多rfq和报价。如何仅在rails中显示关联记录的名称3.1.0

创建报价时,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传递并维护关联(报价有很多测试项目),这是应用程序需要的。然而,它也显示了一个测试项目的选择框,这里不需要(除了删除之外,不能更改测试项目的引用),循环中的t也没有用。我们需要的只是显示测试项目的名称,维护关联(报价有很多测试项目),并允许删除测试项目(由link_to_remove_fields完成)。

有没有一种干净的方法来实现这一目标?非常感谢。

回答

1

看看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来允许删除。

+0

试图在关联之前使用simple_fields_for,不知何故无法正确使用它。 – user938363 2012-02-02 02:01:33

+0

@ user938363你可以发布你试过的代码吗? – 2012-02-03 06:44:43

相关问题