Rails 3.2 アプリケーションには管理パネルがあります。管理パネルはモジュールに分かれています。たとえば、 がありますAdmin::Searching
。反復的でハードコーディングされたパーシャルをリファクタリングしたいと考えています。例えば:
<ul class='searching_nav'>
<% %w(tests fuzzy stats terms hits).each do |tab| %>
<li class="<%= css_nav(tab) %>"><%= link_to tab.humanize, [:admin, :searching, tab] %></li>
<% end %>
</ul>
nav セクションを検索しています。別のコントローラーを追加した後、手動で変更する必要があります。
私が欲しいのは、すべてのコントローラーのリストを取得することですAdmin::Searching
(この名前空間のコントローラーは のサブクラスですAdmin::AdminController
)。Rails api からエレガントな方法でそれを行うことは可能だと思います。次に、すべてのモジュール タブに一般化できます。
私は Admin::AdminController.subclasses をチェックしようとしましたが、その配列のクラスは遅延ロードされるためTerms
、たとえばサーバーの再起動後にヒットした後、要素は 1 つしかなく[Admin::Searching::TermsController]
、他のモジュールにアクセスした後は他のコントローラーもあります。それらを繰り返し処理し、結果に基づいてコントローラーcontroller_path
のみをフィルター処理できます。admin/search
たぶん、ルートの端から可能ですか?つまり、Rails.application.routes.routes から、特定の名前空間にあるすべてのコントローラーを取得できますか?
ファイルシステムにアクセスしたくありません。admin/searching ディレクトリをスキャンできることはわかってDir
いますが、非効率的です。