在Rails引擎中扩展Active Admin视图

时间:2015-07-21 09:33:54

标签: ruby-on-rails activeadmin

我的主应用程序中安装了Active Admin gem,并在我刚刚创建的“engines”目录中设置了可安装的引擎。

我想在我的引擎中调整我的主应用程序的ActiveAdmin视图,这样我就可以添加特定的链接和内容。

我的引擎有自己的命名空间(为简单起见,我们称之为MyOwnEngine)。

我在我的引擎的“lib / admin”目录中创建了一个“activeadmin_components.rb”文件,我添加了这个:

module MyOwnEngine
    module ActiveAdmin
        module Views
           class Header < ::ActiveAdmin::Component

           def build(namespace, menu)
               super(:id => "header")
               # stuff is done here...nothing that matters, really...
               build_site_title
           end

           def build_site_title
                render "admin/parts/myenginespecificpart" 
           end
        end
    end
end

它位于MyOwnEngine命名空间内但从未显示,这些自定义不会覆盖主应用程序中编写的那些

如果我删除命名空间(模块MyOwnEngine部分),那么我的引擎中写的自定义将覆盖我主应用程序的自定义。

如果我点击http://whatever/app,我希望显示我的应用的Active Admin视图,如果我点击http://whatever/engine,我想要获得应用的Active Admin视图+自定义设置我已经完成了我的引擎,但我不能。

我知道它必须是与命名空间相关的问题,它必须是微不足道的,但我现在无法弄清楚它是什么。

感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

你能做的就是这样:

require "active_admin/views/header"
module ActiveAdmin
  module Views
    class Header < ::ActiveAdmin::Component

      def build(namespace, menu)
        super(:id => "header")

        if namespace.name == "namespace to hack"
          # stuff is done here...nothing that matters, really...
          build_my_site_title
        else
          @namespace = namespace
          @menu = menu
          @utility_menu = @namespace.fetch_menu(:utility_navigation)

          build_site_title
          build_global_navigation
          build_utility_navigation
        end
      end

      def build_my_site_title
        render "admin/parts/myenginespecificpart"
      end
    end
end