Ruby on rails 如何实现在项目列表中动态追加新项目?

Ruby on rails 如何实现在项目列表中动态追加新项目?,ruby-on-rails,ruby,Ruby On Rails,Ruby,对于@item\u列表,我有一个表单: <%= form_for @item_list do |f|%> some meta-info to describe item_list <%end%> 在我的索引视图中,我有一个名为additem的按钮,它将调用jquery ajax函数将这个部分附加到div块,还有一个名为done的按钮,我希望它一次存储所有表单中的所有信息 当我试图保存这些时,参数不包括项目信息。我想这是因为我在尝试添加新项目时没有更新后端的项目列表

对于
@item\u列表
,我有一个表单:

<%= form_for @item_list do |f|%>
   some meta-info to describe item_list
<%end%>
在我的索引视图中,我有一个名为
additem
的按钮,它将调用jquery ajax函数将这个部分附加到div块,还有一个名为
done
的按钮,我希望它一次存储所有表单中的所有信息


当我试图保存这些时,参数不包括项目信息。我想这是因为我在尝试添加新项目时没有更新后端的
项目列表。我希望您能就此提供一些想法。

您需要为此设置一个嵌套表单。关于嵌套表单的stackoverflow还有许多其他问题,但要点如下:

  • 在控制器中创建一个新的空对象,以填充项
    @item\u list.items.build
    假设一个ItemList有许多项
  • 添加
    在项目模型中为:项目接受\u嵌套的\u属性\u
  • 在项目模型中添加
    attr\u accessible:items\u属性
  • 您需要将表单生成器传递给partial,因此如下所示:

    _form.html.erb
    
    <%= form_for @item_list do |f| %>
      <% @item_list.items.each do |item| %>
         <%= render 'item', :f => f %>
      <% end %>
    <% end %>
    
    _item.html.erb
    
    <%= f.fields_for :items, item do |item_form| %>
        <%= item_form.text_field ... %>
    <% end %>
    
    \u form.html.erb
    f%>
    _item.html.erb
    

如果您需要更多的细节,请向我们提供更多的代码,包括您的关系模型。此时,我将把javascript留给您。

您需要为此设置一个嵌套表单。关于嵌套表单的stackoverflow还有许多其他问题,但要点如下:

  • 在控制器中创建一个新的空对象,以填充项
    @item\u list.items.build
    假设一个ItemList有许多项
  • 添加
    在项目模型中为:项目接受\u嵌套的\u属性\u
  • 在项目模型中添加
    attr\u accessible:items\u属性
  • 您需要将表单生成器传递给partial,因此如下所示:

    _form.html.erb
    
    <%= form_for @item_list do |f| %>
      <% @item_list.items.each do |item| %>
         <%= render 'item', :f => f %>
      <% end %>
    <% end %>
    
    _item.html.erb
    
    <%= f.fields_for :items, item do |item_form| %>
        <%= item_form.text_field ... %>
    <% end %>
    
    \u form.html.erb
    f%>
    _item.html.erb
    

如果您需要更多的细节,请向我们提供更多的代码,包括您的关系模型。现在我将把javascript留给您。

Hi agmin,我真正想做的是将它们分离成不同的形式。有什么方法可以做到这一点吗?如果你有单独的表格,你只能单独提交。当一个表单被提交时,您可以做一些javascript黑客操作来读取并发布来自所有其他表单的参数,但我认为这没有意义。对于嵌套表单,您似乎仍然有一个非常可靠的用例,但也许您想将其ajaxify化以添加项?是的,您是对的。如果我一次提交所有表单,可能会让代码变得难看,难以维护。我确实使用ajax来添加项目。我已经实现了这一部分。我想使用多表单的原因是因为UI,我想把项目列表信息和项目放在一个页面中的两个不同的位置。所以我会一直想一个有效的方法来解决这个问题。谢谢你,agmin,我已经重写了UI,这样嵌套表单就可以很好地解决这个问题。谢谢你的回答和建议。这很有帮助。嗨,阿明,我真正想做的是把它们分成不同的形式。有什么方法可以做到这一点吗?如果你有单独的表格,你只能单独提交。当一个表单被提交时,您可以做一些javascript黑客操作来读取并发布来自所有其他表单的参数,但我认为这没有意义。对于嵌套表单,您似乎仍然有一个非常可靠的用例,但也许您想将其ajaxify化以添加项?是的,您是对的。如果我一次提交所有表单,可能会让代码变得难看,难以维护。我确实使用ajax来添加项目。我已经实现了这一部分。我想使用多表单的原因是因为UI,我想把项目列表信息和项目放在一个页面中的两个不同的位置。所以我会一直想一个有效的方法来解决这个问题。谢谢你,agmin,我已经重写了UI,这样嵌套表单就可以很好地解决这个问题。谢谢你的回答和建议。这帮了大忙。