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
相关产品推荐
相关产品推荐

