Rails将update_attributes上的记录加倍

时间:2016-07-09 19:39:34

标签: ruby-on-rails 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 %>

1 个答案:

答案 0 :(得分:1)

您缺少:printer_params中的ID。如果没有:id,每个嵌套params的更新都被认为是一个新记录。对于colors_attributes,它应该如下:

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

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