実際に多くの種類の構成可能なオブジェクトを管理するためにRESTfulなアプリケーションを構築しようとしています。したがって、大量の "リソース"タイプがあります。私はまだPOC段階にあるので、すべてのコントローラを最初のナビゲーションページに表示できるといいですね。Railsにすべてのコントローラをプログラムでリストする方法
答えて
グーグル:「レールリストコントローラの
最初の結果。
http://snippets.dzone.com/posts/show/4792
サブクラスについて学んだ後、私は
ApplicationController.subclasses.each do |c|
puts "Controller: #{c}"
puts "Actions: #{c.constantize.action_methods.collect{|a| a.to_s}.join(', ')}"
end
ApplicationController.subclasses
は、それはあなたが始められるでしょう..私のリンクからのコードは次のように簡単に行うことができると思いますが、開発モードでは、実際にロードされているものだけが表示されるため、あまり表示されないことに注意してください。プロダクションモードで起動すると、すべてのコントローラの一覧が表示されます。 Railsの3.1以上で
"#{RAILS_ROOT}/app/controllers"内のすべてのファイルに開発モードでリストを入力させることができます。 – EmFi
これは実動モードでは動作しますが、開発モードでは動作しないことに注意してください。コントローラが遅延ロードされているためです。レールコンソールモードであなたのアプリを起動し、サブクラス/子孫を見ると、あなたは何も見えません。コントローラの名前を入力すると、指定されたクラスがサブクラスとして表示されます。 ActiveAdminはこれで良い仕事をしているようです... GitHubでコードをチェックしたいかもしれません。 – Raels
これは完全な解決策ではありません。なぜなら、すべてのコントローラを取得せず、AplicationControllerの直接的なサブクラスのみを取得するからです。階層内に2つのレベルの入れ子がある場合は、それらをすべてガートすることはありません。代わりにApplicationController.descendantsを使用してください。また、ロード時にすべてのコントローラを取得するには、Rails.application.eager_loadを使用できます。あなたの開発環境やテスト環境のイニシャライザでは、すべてのレールアプリケーションを読み込んでブートを遅くし、副作用があることに気づくでしょう。 –
:あなたのroutes.rbをファイルにそのパスを持っている場合
Rails.application.routes
これはあなたのすべてのコントローラ、アクションとそのルートを提供します。例えば
:
routes= Rails.application.routes.routes.map do |route|
{alias: route.name, path: route.path, controller: route.defaults[:controller], action: route.defaults[:action]}
end
更新: レール3.2のコードとなるように、ジャーナル・エンジン・パスは、変更された:
routes= Rails.application.routes.routes.map do |route|
{alias: route.name, path: route.path.spec.to_s, controller: route.defaults[:controller], action: route.defaults[:action]}
end
アップデート: はまだレール4.2.7ために働きます。あなたは、コントローラのサブクラス(例えばContactPageController
継承からを持っている場合は、@ JDLの方法は、それが失敗した多くの状況で動作しますが(実際の質問あたり)コントローラのリストを抽出するには、単にコントローラとuniq
controllers = Rails.application.routes.routes.map do |route|
route.defaults[:controller]
end.uniq
ソースは次のとおりです。 https://github.com/rails/rails/blob/master/railties/lib/rails/tasks/routes.rake https://github.com/rails/rails/blob/ railsは開発モードのサーバー情報のためのinbuiltルートを作成するが、そのルートを見つけることは、読者のための練習に残っていることに気づいた。 – nurettin
を抽出することができますApplicationController
を継承するPageController
)。
したがって、より良い方法が使用することです:
::ApplicationController.descendants
routes
を使用すると、部品はエンジンとして抽象化され、複雑なアプリを持っている場合、これらは非表示になります動作しない場合があります。
アクティブな管理者のサブクラスでは機能しませんでしたが、あなたの作品は!ありがとうございました – Fedcomp
私は特に
ApplicationController.subclasses
@jdlソリューションを気に入っしかし、私は本当にアンダースコア形式ですべてのコントローラ名を必要に応じて私の場合、(私はサブディレクトリなど必要はありません。/admin
)の中で、私は次のように使用:
Dir[Rails.root.join('app/controllers/*_controller.rb')].map { |path| path.match(/(\w+)_controller.rb/); $1 }.compact
Dir[Rails.root.join('app/controllers/*_controller.rb')].map { |path| (path.match(/(\w+)_controller.rb/); $1).camelize+"Controller" }
それがコントローラファイル内で表示されますので、これは私たちに、コントローラの正確な名前を与えます。
別の解決策は、(あなたがRailsの中でなら5)開発中とコントローラとアクションをマップする必要があります。
Rails.application.routes.set.anchored_routes.map(&:defaults)
あなたが拒否することができます[:内部]必要に応じて:
.reject { |route| route[:internal] }
- 1. Rails 3のすべての自動ロードパスをリストする方法
- 2. プログラムですべての配送方法のリストを取得
- 3. Java 9ですべてのモジュールのリストをプログラムで取得する方法は?
- 4. すべてのRails 3コントローラとそのパブリックメソッドを一覧表示する方法
- 5. SpringBoot:コントローラからすべてのプログラムに引数(リクエストID)を渡す方法は?
- 6. 定義されたすべてのプロパティをプログラムでリストする方法は?
- 7. すべてのコントローラで関数にアクセスする方法laravel
- 8. mochaを使ってRailsコントローラでクラスをモックする方法
- 9. Rails Engineアプリケーション内のMain Rails Appコントローラにアクセスする方法
- 10. プログラムに含まれるすべてのモジュールをプログラムで取得する方法
- 11. リストのリストからすべての値を合計する方法と、リストのすべてのリストからすべての値を合計する方法
- 12. Rails + SASS。インポートされたすべてのファイルをリストする方法
- 13. すべてのコントローラにResponseBodyAdviceを実装する方法は?
- 14. railsコントローラの設計:同じビューでリストして作成する
- 15. Ruby on Rails 2.3.9で別のコントローラのアクションにレンダリングする方法
- 16. カスタムリストアダプタのすべてのチェックボックスをプログラムで選択する方法
- 17. Rails 5では、コントローラにcurrent_user.idを注入する方法#create method
- 18. JBossで登録されているすべてのDS名(オブジェクト)のリストをプログラムで取得する方法は?
- 19. Rails - すべてのコンソールロギングを無効にする方法は?
- 20. cプログラムですべての整数を取得する方法
- 21. 同じコントローラのすべてのインスタンスを更新する方法
- 22. すべてのsymfonyコントローラのベースクラスを作成する方法
- 23. railsコントローラでの選択方法は?
- 24. Rails 5のすべてのコントローラのプリコンパイルを定義します
- 25. Railsでコントローラ全体の変数を設定する方法は?
- 26. Railsモデルからコントローラのパラメータを後で保存する方法
- 27. bootstrap-multiselect-railsのコントローラで値を取得する方法
- 28. C#を使用してプログラムでSharePointサイトからすべての画像ライブラリのリストを取得する方法
- 29. すべてのEbayのリストをExcelにエクスポートする方法
- 30. Rails:開発モードですべてをリロードする方法は?
の場合コントローラーとアクションをリストするつもりですが、なぜレーキルートを使用しないのですか?出力が乱雑ですが、それは端末ウィンドウを拡張することで修正されています。 – EmFi
私はちょうどリンクがやっていたものに似ているクイックコードを置いていた。少し練習するので、私は覚えています。 – Jim