2016-10-11 48 views
0

我簡化了我更新的形式進行演示:_destroy屬性不破壞記錄

class DesignerLayout < ActiveRecord::Base 
    has_many :designer_panels, dependent: :destroy 
    accepts_nested_attributes_for :designer_panels 

_form.html.erb

<%= form_for @designer_layout do |f| %> 
    <%= f.fields_for :designer_panels, @designer_layout.designer_panels do |designer_panel_builder| %> 
    <%= designer_panel_builder.hidden_field :_destroy %> 
    <%= link_to '#', class: 'remove-item' do %> 
     <%= content_tag :span %> 
    <% end %> 
    <% end %> 
<% end %> 

form.js

$(document).ready(function(){ 
    $('.remove-item').click(function(){ 
    $(this).prev('input[type="hidden"]').val("1"); 
    }) 
}) 

以下是發送到服務器:

Processing by DesignerLayoutsController#update as HTML 
    Parameters: { ... "designer_layout"=>{"designer_panels_attributes"=>{"0"=>{"_destroy"=>"1", "id"=>"5"}}} ... 

如您所見,具有值「1」的_destroy屬性與特定面板的ID一起發送。但是,屬於佈局的面板不會被刪除。爲什麼?

+0

你能證明你的強大的參數去白名單的PARAMS? – dp7

+0

def designer_layout_params params [:designer_layout] .permit! 結束 – Donato

回答

1

allow_destroy: true模型:

accepts_nested_attributes_for :designer_panels, allow_destroy: true 

而且,要確保使用強大的參數去白名單的_destroy

params.require(:designer_layout).permit(designer_panels_attributes: [:id, :_destroy])