Ruby on Rails で API を作成しましたが、使用可能なすべてのルートを一覧表示する 1 つのページが必要です (これは、コマンド ラインを使用して実行できることを知っていますrake routes
)。
コードを更新するたびに自分で更新するのではなく、これを自動的に生成したいと考えています。コントローラー (またはビュー) 内のすべてのルートのリストを取得する方法はありますか?
Ruby on Rails で API を作成しましたが、使用可能なすべてのルートを一覧表示する 1 つのページが必要です (これは、コマンド ラインを使用して実行できることを知っていますrake routes
)。
コードを更新するたびに自分で更新するのではなく、これを自動的に生成したいと考えています。コントローラー (またはビュー) 内のすべてのルートのリストを取得する方法はありますか?
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
次に、ルート、パス、およびコントローラーとアクションの名前を含むハッシュが含まれます。
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