4

Ruby on Rails で API を作成しましたが、使用可能なすべてのルートを一覧表示する 1 つのページが必要です (これは、コマンド ラインを使用して実行できることを知っていますrake routes)。

コードを更新するたびに自分で更新するのではなく、これを自動的に生成したいと考えています。コントローラー (またはビュー) 内のすべてのルートのリストを取得する方法はありますか?

4

2 に答える 2

3

jvnill によって提供されたソリューションの調査を開始したところ、RouteInspectorを使用しないでくださいと記載されているドキュメントが見つかりました。理由はわかりませんが、コードを見て、単なる文字列ではなく、より有用な出力を取得することにしました。出発点として 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次に、ルート、パス、およびコントローラーとアクションの名前を含むハッシュが含まれます。

于 2013-03-28T18:01:36.320 に答える
2

rake ルートの rake タスクがどのように実装されているかを見ることができます :) これは railties gem 内にありlib/rails/tasks/routes.rakeます。しかし、それを簡単にするために、ここにあります

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
于 2013-03-28T16:19:14.343 に答える