我有一个完全正常的资源,由resources :products
.
在我的小马笔记本电脑上,更新在开发中运行良好。生产在我没有太多控制权的服务器上,使用 phusion。每当我尝试更新它时,它都会神秘地重定向,给我一个 404。这是日志中的内容:
64d8] Completed 200 OK in 57ms (Views: 9.6ms | ActiveRecord: 2.0ms)
I, [2018-08-03T13:42:22.444552 #2652091] INFO -- : [dde252e5-5750-4f63-9fd2-b02a882c864c] Started PATCH "/products/578" for > 154.20.31.78 at 2018-08-03 13:42:22 -0700
F, [2018-08-03T13:42:22.445282 #2652091] FATAL -- : [dde252e5-5750-4f63-9fd2-b02a882c864c]
F, [2018-08-03T13:42:22.445332 #2652091] FATAL -- : [dde252e5-5750-4f63-9fd2-b02a882c864c] ActionController::RoutingError (No route matches [PATCH] "/578"):
如您所见,它似乎正在改变我无法访问的地方的路线。
编辑:表格开始:
<%= form_with model: product, local: true do |form| %>
并为 /products/id/edit 正确填充。这会产生 html:
<form enctype="multipart/form-data" action="/products/578" accept-charset="UTF-8" method="post">
<input name="utf8" type="hidden" value="✓" />
<input type="hidden" name="_method" value="patch" />
<input type="hidden" name="authenticity_token" value="g+oaySVsX4QLZSvII9xbEZo3j0lGChrXSHhMUdUyJ+3eZEUK6iC6QK4sa1SkdBX6f2vvH2HXlN+rR5lzQOmDWA==" />
这是控制器中的相关方法,从记录实验来看,似乎从未被触及。奇怪的是,触发的形式format.js
工作得很好。
def update
verify_admin
respond_to do |format|
@product.update(product_params)
if @product.save
save_picture if params[:product][:picture_file]
if params[:commit] == 'Add/Edit'
format.html { redirect_to products_url(@product) }
else
format.js { render inline: 'location.reload()' }
end
else
format.html { render :edit }
end
end
end