我的主应用程序中安装了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视图+自定义设置我已经完成了我的引擎,但我不能。
我知道它必须是与命名空间相关的问题,它必须是微不足道的,但我现在无法弄清楚它是什么。
感谢任何帮助。感谢。
答案 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