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