2016-10-11 5 views
0

Ich habe meine Update-Formular für Demozwecke vereinfacht:_destroy Attribut nicht Datensatz zu zerstören

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"); 
    }) 
}) 

Hier finden Sie An den Server gesendet:

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

Wie Sie sehen können, wird das Attribut _destroy mit dem Wert "1" mit der ID des jeweiligen Bereichs gesendet. Das zum Layout gehörende Panel wird jedoch nicht gelöscht. Warum?

+0

können Sie zeigen Ihre starke param Whitelist die params? – dp7

+0

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

Antwort

1

Set allow_destroy: true in Modell:

accepts_nested_attributes_for :designer_panels, allow_destroy: true 

Und, stellen Sie sicher, dass die _destroy mit starken param auf die weiße Liste:

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