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 %>

餐厅字段部分有一个删除项目的链接:

<%= 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

您可以传入_destroy参数来执行此操作:从客户端接收到的示例属性:

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

您还需要在Restaurant模型中的关联上启用 :allow_destroy 选项。

在此处查看更多信息:Active Record 嵌套属性

于 2012-06-15T04:33:26.990 回答