Rails 路由混淆

问题描述 投票:0回答:1

给出一个我知道路径的机架请求,例如

/things/1
,我怎样才能得到路线参考,例如
/things/:id
?

我可以使用

Rails.application.routes.recognize_path
来获取控制器和操作,但我明确地在寻找混淆路径。

是否有可能在给定控制器#action 的情况下获得可识别的路线?

ruby-on-rails ruby routes rack
1个回答
0
投票

我唯一知道可以获取该信息的地方是

bin/rails routes
。它正在使用检查员收集所有信息:

https://github.com/rails/rails/blob/v7.0.4.3/actionpack/lib/action_dispatch/routing/inspector.rb

也许您会在那里找到其他东西。但我提取了你要求的主要内容:

# in a controller or a template

<% request.routes.router.recognize(request) do |route, _params| %>
  <%= route.path.spec.to_s %> # => /users/:id(.:format)
<% end %>
# in a console

>> Rails.application.routes.router.recognize(
  ActionDispatch::Request.new(Rack::MockRequest.env_for("/users/1/edit", method: :get))
) {}.map {|_,_,route| route.path.spec.to_s }
=> ["/users/:id/edit(.:format)"]

route
这里是
ActionDispatch::Journey::Route
实例,其中包含有关路线的所有信息。

© www.soinside.com 2019 - 2024. All rights reserved.