如何仅在rails 3.1.0中显示关联记录的名称

时间:2012-02-01 18:51:33

标签: ruby-on-rails ruby-on-rails-3.1 nested-attributes simple-form

我们的rails 3.1.0 app中有rfq,quote和test_item。 RFQ有很多报价和测试项目。引用属于rfq并且有许多测试项目。测试项目有很多rfq和引号。

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

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

1 个答案:

答案 0 :(得分: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来允许删除。