0

次のようにネストされたフォーム構造があります。

class List < ActiveRecord::Base
has_many :restaurants, :dependent => :destroy
end

class Restaurant < ActiveRecord::Base
  belongs_to :list
end

リストを作成/編集するのと同じフォームで、レストランのアイテムを特定のリストに追加できます。リスト フォーム内でレストランの項目をネストするには、次のようにします。

 <%= f.fields_for :restaurants do |builder| %>
        <%= render 'restaurant_fields', f: builder %>
 <% end %>
 <%= link_to_add_fields "+ add to stack", f, :restaurants %>

restaurant フィールドのパーシャルには、アイテムを削除するためのリンクがあります。

<%= link_to "remove stack item", '#', class: "remove_fields" %>

これらのアクションの jquery (coffeescript) は次のとおりです。

jQuery ->
  $('form').on 'click', '.remove_fields', (event) ->
    $(this).prev('input[type=hidden]').val('1')
    $(this).closest('fieldset').hide()
    event.preventDefault()

  $('form').on 'click', '.add_fields', (event) ->
    time = new Date().getTime()
    regexp = new RegExp($(this).data('id'), 'g')
    $(this).before($(this).data('fields').replace(regexp, time))
    event.preventDefault()

スタック項目の削除をクリックすると、スタック項目 (レストラン) がビューから非表示になるだけでなく (上記参照)、実際のレコードも同時に削除されるように、ajax 要求を送信したいと考えています。これについてどのようにアドバイスしますか?

4

1 に答える 1

0

これを行うには、param を渡すことができ_destroyます: クライアントから受け取った属性の例:

"restaurant" => { "stack_item" => { "id" => "987", "_destroy" => "1" } }

Restaurantモデルの関連付けでも :allow_destroy オプションを有効にする必要があります。

ここで詳細を参照してください:アクティブレコードのネストされた属性

于 2012-06-15T04:33:26.990 に答える