给出一个我知道路径的机架请求,例如
/things/1
,我怎样才能得到路线参考,例如/things/:id
?
我可以使用
Rails.application.routes.recognize_path
来获取控制器和操作,但我明确地在寻找混淆路径。
是否有可能在给定控制器#action 的情况下获得可识别的路线?
我唯一知道可以获取该信息的地方是
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
实例,其中包含有关路线的所有信息。