You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将orders路由请求重定向至new_orders控制器?

解决方案

当然可以把发往orders的请求转到new_orders的控制器处理,你之前用redirect的写法存在问题,导致前端拿不到数据,具体原因:

  • redirect('/new_orders')属于HTTP外部重定向,会返回3xx状态码,前端AJAX请求如果未处理重定向响应,不会自动获取新地址的返回数据;
  • 针对POST类型的create请求,默认302重定向会把请求方法改为GET,导致原POST提交的创建参数丢失,新控制器无法拿到数据。

推荐采用内部转发的方式,直接让旧路由映射到新控制器的动作,前端完全无感知,也不会出现数据丢失问题:

写法1:直接映射路由

替换原来的resources :orders, only: [:index, :create],改成:

get '/orders', to: 'new_orders#index'
post '/orders', to: 'new_orders#create'

写法2:用resources集合路由

如果想保留resources的结构,也可以这么写:

resources :orders, only: [] do
  collection do
    get '', to: 'new_orders#index'
    post '', to: 'new_orders#create'
  end
end

如果确实需要让前端地址栏跳转至new_orders(比如SEO需求),可以使用带状态码的重定向,确保POST请求保留原方法和数据:

get '/orders', to: redirect('/new_orders')
post '/orders', to: redirect('/new_orders', status: 307)

注意:307重定向需要前端AJAX库支持处理,否则仍可能无法正常获取数据,因此优先选择内部转发方案。

内容的提问来源于stack exchange,提问作者Anna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 18:15:42