QA@IT

Rails で routes の一覧を取得する方法

8193 PV

Rails アプリケーションの内部で Routes の一覧を /users/:id のような文字列として簡単に取得する方法を教えてください。

Rails.applicaiton.routes.routes で取得出来る Journey のインスタンスを自分で加工するしか無いのでしょうか?

回答

railsの最新版だと、いろいろ変化していて上記のやり方だとダメみたいです。

gems/railties-x.x.x/lib/rails/tasks/routes.rake

rake routes
の処理内容がそのまま書いてあるのでコピペして実行すればいいと思います。

ちなみに私はこのファイルを見つける際、
rake -T
で出力される説明文で全部のgemの中身を全文検索しました。

編集 履歴 (3)

rake routes って何やってるんだ? と思ってソースを読んでみると、Rails::Application::RouteInspectorなるものがあるようですね…
https://github.com/rails/rails/blob/master/railties/lib/rails/application/route_inspector.rb

思いっきり"People should not use this class"て書いてはありますが、これを使えばrake routesと同様の文字列を得るのは可能と思います。

編集 履歴 (0)
  • kenn さんの回答にもありましたが、RouteInspector というものがあるんですね。勉強になります。 -
rake routes

ではだめですか?

追記

質問を勘違いしてました。

プログラム的にとりたいということなら、

require 'rails/application/route_inspector'
all_routes = Rails.application.routes.routes
inspector = Rails::Application::RouteInspector.new
inspector.collect_routes(all_routes).map{|i| i[:path] }

でいけますね。

編集 履歴 (2)
  • やりたかったことはこれです。ありがとうございます。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。