在视图/控制器中显示路径

时间:2013-03-28 16:09:39

标签: ruby-on-rails ruby-on-rails-3

我在Ruby on Rails中编写了一个API,我希望有一个列出所有可用路由的页面(我知道这可以通过命令行使用rake routes完成)。

我想自动生成这个,而不是每次更新代码时都要自己更新。有没有办法获取控制器(或视图)中所有路径的列表?

2 个答案:

答案 0 :(得分:3)

我开始探索jvnill给出的解决方案,并在docs中找到了RouteInspector should not be used。出于什么原因我不知道,但我决定看看代码,并尝试获得更有用的输出而不仅仅是字符串。我使用jvnill的代码作为起点。

all_routes = Rails.application.routes.routes
routes = all_routes.routes.collect do | route |
  reqs = route.requirements

  controller = reqs[:controller] || ':controller'
  action = reqs[:action] || ':action'

  constraints = reqs.except(:controller, :action)

  verb = route.verb.source.gsub(/[$^]/, '')

  {name: route.name.to_s, verb: verb, path: route.path.spec.to_s, reqs: reqs}

end

routes.reject! { |r| r[:path].starts_with?("/rails/info/properties") || r[:path] == "#{Rails.application.config.assets.prefix}" }

routes然后包含一个包含路由名称,路径以及控制器和操作的哈希值。

答案 1 :(得分:2)

您可以查看rake路由的rake任务是如何实现的:)可以在lib/rails/tasks/routes.rake内的railties gem中找到它。但为了更容易,这里是

task :routes => :environment do
  Rails.application.reload_routes!
  all_routes = Rails.application.routes.routes

  require 'rails/application/route_inspector'
  inspector = Rails::Application::RouteInspector.new
  puts inspector.format(all_routes, ENV['CONTROLLER']).join "\n"
end