0

私は1つのフォームを表示してい@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これは、新しいアイテムを追加しようとしたときにバックエンドでを更新しなかったためだと思います。これについていくつかのアイデアを教えていただければ幸いです。

4

1 に答える 1

3

このためにネストされたフォームを設定する必要があります。ネストされたフォームに関するstackoverflowについては他にも多くの質問がありますが、要点は次のとおりです。

  • コントローラーに新しい空のオブジェクトを作成@item_list.items.buildして、ItemListhas_manyItemsを想定してアイテムを設定します
  • accepts_nested_attributes_for :itemアイテムモデルを追加します
  • アイテムモデルも追加attr_accessible :items_attributesします
  • フォームビルダーをパーシャルに渡す必要があるので、次のようにします。

    _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をお任せします。

于 2012-10-26T01:57:56.213 に答える