【问题标题】:How to only display the name of an associated record in rails 3.1.0如何仅在 rails 3.1.0 中显示关联记录的名称
【发布时间】:2012-02-01 18:51:32
【问题描述】:

我们的 rails 3.1.0 应用程序中有 rfq、quote 和 test_item。 RFQ 有很多报价和测试项目。 Quote属于一个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 传递过来的测试项,并保持关联(引用有很多测试项),这是应用程序需要的。但是,它还显示了一个此处不需要的测试项目的选择框(除了删除之外,不能更改引用中的测试项目。循环中的 t 也没有用)。我们只需要显示测试项的名称,保持关联(引用有很多测试项)并允许删除测试项(由link_to_remove_fields完成)。

有没有一种干净的方法来完成这个?非常感谢。

【问题讨论】:

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


    【解决方案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 允许删除。

    【讨论】:

    • 在关联前尝试使用simple_fields_for,不知怎么弄错了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    相关资源
    最近更新 更多