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

Rails控制器中如何获取带路由参数格式的当前路径?

在Rails控制器中获取与routes一致的路径格式

要在Rails控制器中获取类似record/:id这种和rails routes输出一致的路径模板,你可以通过路由识别机制来实现,具体方法如下:

  • 方法一:通过路由识别提取模板
    在控制器中添加以下代码:

    # 获取当前请求匹配的路由对象
    matched_route = Rails.application.routes.router.recognize(request) do |route, _, _|
      break route
    end
    
    # 提取路径模板,去掉开头的斜杠得到目标格式
    route_template = matched_route.path.spec.to_s.delete_prefix('/')
    

    当访问www.test.com/record/3时,route_template会返回record/:id,完全符合需求。

  • 方法二:结合路由名称生成模板
    若知晓当前路由的名称,也可通过路由名称反向生成模板:

    # 拼接当前路由的命名辅助方法
    route_helper = "#{controller.controller_name}_#{controller.action_name}_path"
    # 生成带占位符的路径模板
    route_template = Rails.application.routes.url_helpers.send(route_helper, :id).gsub(%r{/\d+}, '/:id')
    

    这种方法适合参数格式固定的场景,通用性稍弱。

注意:如果同一个请求对应多个路由(比如GET/POST方法对应不同路由),可指定请求方法精准匹配:

matched_route = Rails.application.routes.router.recognize(request, method: request.method) do |route, _, _|
  break route
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:40:27