我们的 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>
它正在搜索导航部分,添加另一个控制器后,您必须手动更改它。
我想要的是,获取所有控制器的列表Admin::Searching
(此命名空间中的控制器是 的子类Admin::AdminController
)。我相信可以从 Rails api 以优雅的方式做到这一点。然后可以将其推广到所有模块选项卡。
我曾尝试检查 Admin::AdminController.subclasses,但该数组中的类是延迟加载的,因此Terms
例如在服务器重启后,只有一个元素[Admin::Searching::TermsController]
,并且在访问其他模块后还有其他控制器。我可以遍历它们并根据controller_path
结果,只过滤admin/search
控制器。也许有可能从路线结束?我的意思是,我可以从 Rails.application.routes.routes 获取给定命名空间中的所有控制器吗?
我不想进入文件系统。我知道我可以使用它来扫描 admin/searching 目录,Dir
但它效率低下。