首页 > 解决方案 > 重定向 PATCH 和 PUT 路由轨道 5 以使用 POST

问题描述

我目前正在将正确的路由添加到旧版 Rails 应用程序中,我似乎无法使用 PATCH、PUT 和 DELETE 路由,因为该应用程序目前的工作方式仅基于 GET 和 POST 路由。

所以我已经实现了 REST 路由,但目前,我需要重定向 PATCH、PUT 和 DELETE,直到我们可以更改它以使用正确的路由。

这是我在更新时得到的:

在此处输入图像描述

这些是自定义字段的路由# custom_fields

resources :custom_fields, except: %i[show destroy] do
  get :disable, on: :member
  
  collection do
    get :list
    get :edit
    get :disable
    get :enable
    get :order_fields
    post :process_order_fields
  end
end
# remap wrong implmentation of paths
get '/custom_fields/edit/:id', to: redirect('/custom_fields/%{id}/edit')

在此处输入图像描述

我试过以下

post '/custom_fields/:id', to: redirect(custom_field_path(id: %{id}))

但没有骰子。

标签: ruby-on-railsrubyroutesruby-on-rails-5

解决方案


我不明白你的问题。为什么您“需要”添加这些重定向?

如果您希望定义一个POST像 的遗留路由post '/custom_fields/:id',但在内部让它执行与非遗留PUT/PATCH请求相同的操作,那么只需将其定义为:

resources :custom_fields, except: %i[show destroy] do
  post :update, on: :member
  # ...
end

此外,根据 HTTP 规范,将其定义为您尝试的重定向是无效的:

如果收到 302 状态码以响应 GET 或 HEAD 以外的请求,除非用户可以确认,否则用户代理不得自动重定向请求,因为这可能会改变发出请求的条件。


推荐阅读