Rails 4 - ActiveAdmin 布局为空白,但应用程序布局适用于自定义控制器操作
Rails 4 - ActiveAdmin layout is blank but application layout works for custom controller action
我有一个 Rails4 应用程序 active_admin
管理员 only.i 已经使用它很长时间了,并按照我想要的方式对其进行了自定义,它一直有效,但现在,它这是我无法解决的小问题吗?
我的观察---
我的布局有 active_admin.html.erb
和 application.html.erb
。当我重命名我的 active_admin.html.erb 或删除它时..自定义操作正常工作并呈现,但其他页面显示包含两个 [=34] 的双重内容呈现=]、body 和页脚,但当我保留管理布局时,一切正常,但自定义操作呈现空白布局。
我在我的 admin/hall.rb
模型中的控制器块中有一个自定义操作,它也根据服务器日志执行,其中还包括 active_admin 布局但是在屏幕上,我看不到任何布局,它只是空白,但是当我在控制器块中明确使用应用程序布局时,它起作用了。
ActiveAdmin.register Hall do
controller do
##explicitly add helper to be used by existing partials
helper ApplicationHelper
###DO NOT WORK
#layout 'active_admin' # <-- here
##THE WEIRD PART################
layout 'application' , :except => [:activities] ===> this render the application layout perfectly which i dont want , as i need the active_admin layout
layout 'active_admin' , :except => [:activities] ==> also render the application layout...STRANGE
layout 'active_admin' , :only => [:activities] ==> render the application layout but with only icon and entire page is blank
def activities
@hall = MODEL.find params[:id]
@activities = @hall.get_public_activity
##EVERYTHING BELOW THIS DO NOT WORK, I HAVE TRIED IT
#render :activities, :layout => false
#render :partial=>'admin/halls/activities', :layout => "active_admin"
##render "activities", layout: "active_admin"
end
#######server logs
Processing by Admin::HallsController#activities as HTML
...
...
....
(1.7ms) SELECT COUNT(*) FROM "activities" WHERE "activities"."trackable_id" = AND ("activities"."owner_id" IS NOT NULL) [["trackable_id", 1021]]
PublicActivity::Activity Load (1.5ms) SELECT "activities".* FROM "activities" WHERE "activities"."trackable_id" = AND ("activities"."owner_id" IS NOT NULL) ORDER BY created_at desc LIMIT 50 OFFSET 0 [["trackable_id", 1021]]
User Load (1.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = LIMIT 1 [["id", 3]]
Announcement Load (1.4ms) SELECT "announcements".* FROM "announcements" WHERE "announcements"."id" = LIMIT 1 [["id", 1021]]
Rendered public_activity/announcement/_create.html.erb (19.4ms)
Rendered admin/halls/activities.html.erb within layouts/active_admin (27.4ms)
...
...
Completed 200 OK in 681ms (Views: 368.8ms | ActiveRecord: 56.4ms | Elasticsearch: 0.0ms)
谁能帮我弄清楚这里出了什么问题。
提前致谢。
默认情况下,ActiveAdmin 会绕过 Rails ActionView 布局,转而使用它自己的 Views::Pages 内置于 Arbre 中的组件。因此 ActiveAdmin 中的 active_admin.html.arb 包含
insert_tag view_factory.layout
并且您不应该覆盖它。 ActiveAdmin 不使用 application.html.erb,这让我觉得您可能正在使用 Active Admin 自定义布局 gem。您能否确认这一点,以及您使用的是 RubyGems 的 ActiveAdmin 版本还是 GitHub 的最新版本? Active Admin 中的自定义页面实际上是唯一使用 ActiveAdmin::Views::Pages::Layout 的页面,它会调用 ActionView 的 content_for_layout:一个潜在的混乱来源,并且可能是不一致行为的原因你正在经历。
好吧,现在我知道 reason.Looking 是什么了,通过日志清楚地提到了一些关于布局的内容,当我搜索代码时,我发现有一个代码可以覆盖 [=19] 的 BaseController =] 现在删除了该代码,现在它的工作方式与我 want.i 共享下面导致问题的代码一样...
###admin/custom_layout.rb
###XXXXXXXXXXXXXXXXXXXXXXX REMOVED THIS FILE ###########################
# module BaseControllerPatch
# def determine_active_admin_layout
# ##'activeadmin_custom_layout/application'
# 'active_admin'
# end
# end
# module ActiveAdmin
# class BaseController
# prepend BaseControllerPatch
# end
# end
现在我没有任何 cusotm active_adin 代码,默认情况下,它可以完美运行而无需添加自定义 code.However,我想在 body 标签中添加自定义属性,我可以轻松添加 initializers/active_admin.rb
希望这对某人有所帮助。
我有一个 Rails4 应用程序 active_admin
管理员 only.i 已经使用它很长时间了,并按照我想要的方式对其进行了自定义,它一直有效,但现在,它这是我无法解决的小问题吗?
我的观察---
我的布局有 active_admin.html.erb
和 application.html.erb
。当我重命名我的 active_admin.html.erb 或删除它时..自定义操作正常工作并呈现,但其他页面显示包含两个 [=34] 的双重内容呈现=]、body 和页脚,但当我保留管理布局时,一切正常,但自定义操作呈现空白布局。
我在我的 admin/hall.rb
模型中的控制器块中有一个自定义操作,它也根据服务器日志执行,其中还包括 active_admin 布局但是在屏幕上,我看不到任何布局,它只是空白,但是当我在控制器块中明确使用应用程序布局时,它起作用了。
ActiveAdmin.register Hall do
controller do
##explicitly add helper to be used by existing partials
helper ApplicationHelper
###DO NOT WORK
#layout 'active_admin' # <-- here
##THE WEIRD PART################
layout 'application' , :except => [:activities] ===> this render the application layout perfectly which i dont want , as i need the active_admin layout
layout 'active_admin' , :except => [:activities] ==> also render the application layout...STRANGE
layout 'active_admin' , :only => [:activities] ==> render the application layout but with only icon and entire page is blank
def activities
@hall = MODEL.find params[:id]
@activities = @hall.get_public_activity
##EVERYTHING BELOW THIS DO NOT WORK, I HAVE TRIED IT
#render :activities, :layout => false
#render :partial=>'admin/halls/activities', :layout => "active_admin"
##render "activities", layout: "active_admin"
end
#######server logs
Processing by Admin::HallsController#activities as HTML
...
...
....
(1.7ms) SELECT COUNT(*) FROM "activities" WHERE "activities"."trackable_id" = AND ("activities"."owner_id" IS NOT NULL) [["trackable_id", 1021]]
PublicActivity::Activity Load (1.5ms) SELECT "activities".* FROM "activities" WHERE "activities"."trackable_id" = AND ("activities"."owner_id" IS NOT NULL) ORDER BY created_at desc LIMIT 50 OFFSET 0 [["trackable_id", 1021]]
User Load (1.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = LIMIT 1 [["id", 3]]
Announcement Load (1.4ms) SELECT "announcements".* FROM "announcements" WHERE "announcements"."id" = LIMIT 1 [["id", 1021]]
Rendered public_activity/announcement/_create.html.erb (19.4ms)
Rendered admin/halls/activities.html.erb within layouts/active_admin (27.4ms)
...
...
Completed 200 OK in 681ms (Views: 368.8ms | ActiveRecord: 56.4ms | Elasticsearch: 0.0ms)
谁能帮我弄清楚这里出了什么问题。
提前致谢。
默认情况下,ActiveAdmin 会绕过 Rails ActionView 布局,转而使用它自己的 Views::Pages 内置于 Arbre 中的组件。因此 ActiveAdmin 中的 active_admin.html.arb 包含
insert_tag view_factory.layout
并且您不应该覆盖它。 ActiveAdmin 不使用 application.html.erb,这让我觉得您可能正在使用 Active Admin 自定义布局 gem。您能否确认这一点,以及您使用的是 RubyGems 的 ActiveAdmin 版本还是 GitHub 的最新版本? Active Admin 中的自定义页面实际上是唯一使用 ActiveAdmin::Views::Pages::Layout 的页面,它会调用 ActionView 的 content_for_layout:一个潜在的混乱来源,并且可能是不一致行为的原因你正在经历。
好吧,现在我知道 reason.Looking 是什么了,通过日志清楚地提到了一些关于布局的内容,当我搜索代码时,我发现有一个代码可以覆盖 [=19] 的 BaseController =] 现在删除了该代码,现在它的工作方式与我 want.i 共享下面导致问题的代码一样...
###admin/custom_layout.rb
###XXXXXXXXXXXXXXXXXXXXXXX REMOVED THIS FILE ###########################
# module BaseControllerPatch
# def determine_active_admin_layout
# ##'activeadmin_custom_layout/application'
# 'active_admin'
# end
# end
# module ActiveAdmin
# class BaseController
# prepend BaseControllerPatch
# end
# end
现在我没有任何 cusotm active_adin 代码,默认情况下,它可以完美运行而无需添加自定义 code.However,我想在 body 标签中添加自定义属性,我可以轻松添加 initializers/active_admin.rb
希望这对某人有所帮助。