0

我正在构建一个 CMS 作为 gem 的子集,所有这些都继承自 Base gem。每个 gem 提供不同的功能,即博客、页面、事件等。我想设置我的 Base gem,以便它可以根据已安装的 gem 动态构建导航。我不想通过查找所有控制器/路由来自动执行此操作,我宁愿让每个 gem 将导航项标识为哈希数组,即:

# In my Admin controller (from which all other gem controllers inherit)
@admin_navigation = [{controller: "users", label: "Users", sort_order: 10}, {controller: "settings", label: "Settings", sort_order: 11}]

# In my Pages gem
@admin_navigation += [{controller: "pages", label: "Pages", sort_order: 3}, {controller: "page_templates", label: "Pagetemplates", sort_order: 8}]

# In my blog gem
@admin_navigation += [{controller: "posts", label: "Blog", sort_order: 4}, {controller: "tags", label: "Tags", sort_order: 5}]

基本上我希望我的@admin_navigation 变量包含来自每个继承的控制器的所有导航项。控制器有没有办法从每个继承的控制器调用方法?

有没有更好的方法来实现这一点?最后,我只需要这些导航项哈希的数组来构建我的菜单。提前致谢!

4

1 回答 1

1

您可以将 rubyinherited​​ 方法用于类。所以在你的AdminController,你会

def self.inherited(subclass)
  @admin_navigation ||= []
  @admin_navigation += subclass.admin_navigation
end

假设它@admin_navigation作为继承控制器上的类方法公开。您还必须确保AdminController首先定义它,然后再真正加载所有控制器,以便它们触发回调。

于 2013-04-14T10:23:41.307 回答