2016-07-09 12 views
0

Meine Update-Funktion verdoppeln die Datensätze für verschachtelte Elemente im Modell beim Senden.Rails verdoppeln die Datensätze auf update_attributes

Die eine, die nicht in den fields_for funktioniert als erwartet, aber jeder Datensatz in fields_for verdoppelt.

Was fehlt mir? Jede Hilfe wird sehr geschätzt

def edit 
    @printer = Printer.find(params[:id]) 
    end 

    def update 
    @printer = Printer.find(params[:id]) 
    if @printer.update_attributes(printer_params) 
     redirect_to @printer 
    else 
     render 'edit' 
    end 
    end 

def printer_params 
    params.require(:printer).permit(:model, colors_attributes: [:color], materials_attributes: [:material], printer_photos_attributes: [:image_url]) 
end 

edit.html.erb

<%= form_for @printer, html: { multipart: true }, :url => url_for(:controller => 'printers', :action => 'update') do |p|%> 

     <%= p.text_field :model %> 

     <%= p.fields_for :colors do |color|%> 
      <%= color.text_field :color %> 
     <% end %> 

     <%= p.submit "Edit" %> 
    <% end %> 
+1

Haben Sie [diese Frage] (http://stackoverflow.com/questions/9944065) und ihre Antworten überprüft? –

Antwort

1

Sie fehlen: id in printer_params. Ohne: id wird jedes Update für verschachtelte Parameter als neuer Datensatz betrachtet. Es sollte für Ihre colors_attributes wie folgt sein:

def printer_params 
    params.require(:printer).permit(:model, colors_attributes: [:id, :color], materials_attributes: [:material], printer_photos_attributes: [:image_url]) 
end 

Ich denke, Sie sollten auch Ihre anderen verschachtelte Attribute in dieser Methode korrigieren.

Verwandte Themen