如何在每个请求中修改ActiveAdmin中的“标题”部分?

时间:2012-05-10 21:47:13

标签: ruby-on-rails activeadmin

我是ActiveAdmin的新手,我正试图在出现某些情况时显示大胆而大胆的警告。

在阅读完文档后我不知道如何做到这一点。

我设法做的最好的事情是根据某些条件选择性地注册页面或不注册它们。这样做的目的是有选择地添加菜单元素。 这在dev中有效,但在生产中失败,在每次请求中都没有重新加载代码。

if warnings
  main_menu_title = fatal ? "Fatal Warnings" : "Warnings"

  ActiveAdmin.register_page main_menu_title do
    menu :priority => 99
  end
  ActiveAdmin.register_page "Warnings_job_count" do
    menu :label => "#{delayed_job_count} delayed jobs", :parent => main_menu_title, :priority => 1
  end
  ActiveAdmin.register_page "Warnings_job_errors" do
    menu :label => "#{delayed_job_error_count} delayed jobs with errors", :parent => main_menu_title, :priority => 2
  end
end

所以,简而言之,问题是...... 是否可以在某个地方声明一个块,它将在每个请求中,在所有页面中执行,并且能够向菜单添加元素,或以某种方式修改标题部分?

非常感谢! 丹尼尔

1 个答案:

答案 0 :(得分:3)

您可以按照https://stackoverflow.com/a/7218598/807442

中的说明使用此功能
# app/admin/views/header_renderer.rb  
module ActiveAdmin
    module Views
      class HeaderRenderer
        def to_html
          title + custom_block + global_navigation + utility_navigation
        end

        def custom_block
          # Your custom block
        end
      end
    end
  end

您还可以将菜单添加到菜单中:

current_menu.add(main_menu_title , url_symbol, priority)

# For sub-items
main_menu = current_menu[main_menu_title]
main_menu.add(sub_item_title, url_symbol, priority)

但是,如果添加这些内容,它们将在未来的请求中保留。所以你可能还需要在每个请求中删除它们,然后只需添加它。为此,请添加:

module ActiveAdmin
  class Menu
    def remove(name)
      item = self[name]
      return if item.nil?
      @items.delete(item)
    end
  end
end

您可以按名称删除。