如何动态地在项目列表中实现附加新项目?

时间:2012-10-26 01:06:46

标签: ruby-on-rails ruby

我在@item_list中有一个表单:

<%= form_for @item_list do |f|%>
   some meta-info to describe item_list
<%end%>

我还有一个名为_item.html.erb的渲染部分:

<%= form_for @item_list.item do |f|%>
   some meta-info to describe item_list.item
<%end%>

在我的索引视图中,我有一个名为add item的按钮,它将调用jquery ajax函数将此部分附加到div块,以及另一个名为done的按钮,我希望将其存储所有表格中的所有信息一次。

当我尝试保存这些时,参数不包含项目信息。我想这是因为当我尝试添加新项目时,我没有在后端更新item_list。我希望你能就此提出一些想法。

1 个答案:

答案 0 :(得分:3)

您将要为此设置嵌套表单。关于嵌套表单的stackoverflow还有很多其他问题,但这里有要点:

  • 在控制器中创建一个新的空对象,以填充项@item_list.items.build,假设ItemList has_many Items
  • 在商品模型中添加accepts_nested_attributes_for :item
  • 在您的商品模型中添加attr_accessible :items_attributes
  • 您需要将表单构建器传递给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 %>
    

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