具有自定义顺序的ActiveAdmin,navigation_menu

时间:2018-03-14 15:16:31

标签: ruby-on-rails activeadmin

我正在使用带有ActiveAdmin gem的Runy On Rails。在我的管理配置中,我有一个AdminPage(Clients),它不应该在通常的菜单中。它应该位于一个相关AdminPage(Company)的navigatio菜单中。通过这种方式,我可以看到公司的客户。

所以,在我的app/admin/people.rb我有:

navigation_menu :company

在这个菜单中,我也有其他元素,一切都像魅力一样。现在,我想对这些项目应用自定义订单。但是当我使用priority时(正如我在应用程序中常用的菜单项中使用的那样),我的模型会丢失navigation_menu

所以,我不能拥有自定义优先级的子菜单。

我可以修改navigation_menu上的优先顺序吗?

1 个答案:

答案 0 :(得分:2)

我认为这确实是ActiveAdmin问题。

我设法使用下面add_to_menu方法所述的猴子补丁来解决。

这不是最优雅的方法,但是它可以在AA中解决问题的同时完成工作。

想象一下,您需要2个父菜单项ClientsProduct,并且每个菜单项都有2个子菜单​​。所有这些管理页面的范围都在navigation_menu :company内,例如:

Clients
-> 1. ClientAddresses
-> 2. ClientProfiles

Products
-> 1. ProductCategories
-> 2. ProductCosts

所以猴子的补丁像这样:

# Put this in app/admin/components/menu.rb
module ActiveAdmin
  class Resource
    module Menu
      def add_to_menu(menu_collection)
        add_parent_options if forced_parents.keys.include? resource_name.plural.to_sym
        if include_in_menu?
          @menu_item = menu_collection.add navigation_menu_name, menu_item_options
        end
      end

      def add_parent_options
        priority, parent = forced_parents[resource_name.plural.to_sym]
        @menu_item_options[:priority] = priority
        @menu_item_options[:parent] = I18n.t("active_admin.menus.#{parent}")
      end

      def forced_parents
        @forced_parents ||=
          {
            client_addresses: [1, :clients],
            client_profiles: [2, :clients],
            product_categories: [1, :products],
            product_costs: [2, :products],
          }
      end
    end
  end

祝你好运