Rails update_attributes 上的记录加倍

Rails double the records on update_attributes

我的更新函数在提交时将模型中嵌套项的记录加倍。

不在 fields_for 中的那个按预期工作,但 fields_for 中的每条记录都翻了一番。

我错过了什么?任何帮助将不胜感激

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

您在 printer_params 中缺少 :id。如果没有 :id,您对嵌套参数的每个更新都被视为新记录。您的 colors_attributes:

应该如下所示
def printer_params
  params.require(:printer).permit(:model, colors_attributes: [:id, :color], materials_attributes: [:material], printer_photos_attributes: [:image_url] )
end

我想,您还应该更正此方法中的其他嵌套属性。