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.erbapplication.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

希望这对某人有所帮助。