我的更新功能将提交时模型中嵌套项的记录加倍。
不在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 %>
答案 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
我想,您还应该更正此方法中的其他嵌套属性。