Rails.application.routes 列出所有路由并确定控制器

use*_*832 3 ruby ruby-on-rails

我正在尝试编写一个脚本,它可以列出所有可用的路由,并为每个路由查询控制器和操作名称(有点像 rake 路由)。

如果我运行,Rails.application.routes.routes我可以看到数据都在那里。我似乎无法访问它。

 @named_routes=
  {"root"=>
    #<ActionDispatch::Journey::Route:0x007fc2cb40a598
     @app=
      #<ActionDispatch::Routing::RouteSet::Dispatcher:0x007fc2cb40b448
       @controller_class_names=#<ThreadSafe::Cache:0x007fc2cb40b420 @backend={}, @default_proc=nil>,
       @defaults={:trailing_slash=>false, :controller=>"home", :action=>"show"},
       @glob_param=nil>,
     @constraints={:required_defaults=>[:trailing_slash, :controller, :action], :request_method=>/^GET$/},
     @decorated_ast=nil,
     @defaults={:trailing_slash=>false, :controller=>"home", :action=>"show"},
Run Code Online (Sandbox Code Playgroud)

我如何使用控制器名称访问隐藏在那里的哈希。

作为一个方面,有没有办法从中确定路径?

Mic*_*ohl 6

如果我正确理解您的问题,这应该有效:

Rails.application.routes.routes.named_routes.values.map(&:defaults)
Run Code Online (Sandbox Code Playgroud)

然后你可以做这样的事情:

Rails.application.routes.routes.named_routes.values.map do |route|
  "#{route.defaults[:controller]}#{route.defaults[:action]}"
end      
Run Code Online (Sandbox Code Playgroud)