在activeadmin中排序父菜单项

问题描述 投票:1回答:3

我有一个菜单,有多个:父项。使用:优先级我可以在下拉菜单中对项目进行排序。

如何对主菜单父项进行排序?我正在使用最新版本的activeadmin

ruby-on-rails-3.2 activeadmin
3个回答
4
投票

我找到了自己帮助自己,我找到了:

如果将以下内容放入config / initializers / active_admin.rb的设置块中。

它使用第一个可显示子菜单项的优先级来指示父项的排序优先级。

  class ::ActiveAdmin::Views::TabbedNavigation
    def priority_for(item)
      child_item = item.children.detect { |child| display_item?(child) }
      child_item ? child_item.priority : item.priority
    end
    private :priority_for

    # Returns an Array of items to display
    def displayable_items(items)
      items.select do |item|
        display_item? item
      end.sort { |i1, i2| priority_for(i1) <=> priority_for(i2) }
    end
  end

这对我来说很好。


2
投票

您可以在默认的活动管理初始化程序中实现相同,不需要黑客攻击:

config.namespace :admin do |admin|
  admin.build_menu do |menu|
    menu.add label: "My first item", priority: 1
    menu.add label: "My second item", priority: 2
    menu.add label: "My third item", priority: 3
  end
end

# config/initializers/active_admin.rb

0
投票

在ActiveAdmin v = 0.4.4这个小修改版本对我来说是一个初始化器:

class ::ActiveAdmin::Views::TabbedNavigation
  def priority_for(item)
    item.children.map(&:priority).min || item.priority
  end

  private :priority_for

  def menu_items
    menu.items.sort { |i1, i2| priority_for(i1) <=> priority_for(i2) }
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.