2012-06-14 41 views
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请求,以使堆项目(餐厅)不只是从视图中隐藏(见上文),而且日e实际记录同时被删除。你会如何建议我去做这件事?

+0

看看这个http://railscasts.com/episodes/197-nested-model-form-part-2?view=asciicast这将是这些好的教程种类的东西 – abhas

回答

0

您可以通过在_destroy参数去这样做的: 例如,从客户端接收的属性:

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

您将需要启用:对在Restaurant模型的关联allow_destroy选项了。

更多,请参阅:Active Record Nested Attributes