【问题标题】:Rails: Dynamically build array from inherited controllers methodRails:从继承的控制器方法动态构建数组
【发布时间】:2013-04-13 15:46:58
【问题描述】:

我正在构建一个 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 变量包含来自每个继承的控制器的所有导航项。控制器有没有办法从每个继承的控制器调用方法?

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

【问题讨论】:

    标签: ruby-on-rails-3 controller


    【解决方案1】:

    您可以对类使用 ruby​​ inherited 方法。所以在你的AdminController 中,你会

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-24
      相关资源
      最近更新 更多