Добавление пользовательских элементов в меню заголовка в ActiveAdmin

Я хочу добавить ссылку, например link_to ( "Редактировать профиль yout", edit_user (current_user)) в заголовке ActiveAdmin. Это возможно?!

Ответ 1

Последние версии ActiveAdmin позволяют сделать это в инициализаторе active_admin.rb:

config.namespace :admin do |admin|
  admin.build_menu do |menu|
    menu.add :label => 'Custom Menu' do |submenu|
      submenu.add :label => 'Custom Link', :url => custom_path
    end
  end
end

Ответ 2

Для последних версий активного администратора есть два решения, оба из которых являются неудачными.

Любые ваши ресурсы с помощью menu false могут быть установлены на menu label: "Google", url: "http://www.google.com". Это печально, потому что он подсвечивается как выбранный, если вы находитесь на ресурсе, с которого вы его установили.

Другим решением является переписывание ActiveAdmin::Views::Header, как указано выше, но обновленное.

module ActiveAdmin
  module Views
    class Header < Component

      def build_global_navigation
        item = ActiveAdmin::MenuItem.new(label: "google", url: "http://www.google.com")
        @menu.add item
        insert_tag view_factory.global_navigation, @menu, :class => 'header-item'
      end
    end
  end
end

Это не работает правильно, так как вы не можете установить такие вещи, как parent: "Developer" для пункта меню... Во всяком случае, я могу сделать вилку, чтобы вы могли добавлять элементы в инициализатор к определенному пространству имен... Кто-нибудь открыл проблему для этого? Я его не видел.

Обновление: Я думаю, что это самый чистый способ реализовать это (без внесения вклада в активный админ).

ActiveAdmin.register_page "Queue" do
  menu parent: "Developer", url: '/admin/resque'
end

Ответ 3

Если вы используете более позднюю версию ActiveAdmin, которая имеет возможность для настраиваемых страниц, вы можете сделать следующее:

 ActiveAdmin.register_page "Store Admin" do
   controller do
     define_method(:index) do
       redirect_to "/store/admin"
     end
   end
 end

Это переопределяет действие index объекта PageController, которое обычно просто отображает страницу, но вместо этого вы можете перенаправить туда, куда хотите, например edit_user_path

Ответ 4

Для меня ответ @kristinalim почти работает, но его custom_path не работают, это дает мне ошибку. Следующий код работает для меня (я должен определить маршруты)

routes = Rails.application.routes.url_helpers
config.namespace :admin do |admin|
    admin.build_menu do |menu|
        menu.add :label => 'Custom Menu' do |submenu|
            submenu.add label: 'Users', url: routes.admin_users_path
        end
    end
end

Ответ 5

согласно сообщению, указанному @phoet, (fooobar.com/info/589616/...) попробуйте этот код:

module ActiveAdmin
  module Views
    class HeaderRenderer
      def to_html
        title + global_navigation + profile_link + utility_navigation
      end

      def profile_link
        link_to ("Edit yout profile", edit_user (current_user))
      end
    end
  end
end