【问题标题】:Rails 4 - ActiveAdmin layout is blank but application layout works for custom controller actionRails 4 - ActiveAdmin 布局为空白,但应用程序布局适用于自定义控制器操作
【发布时间】:2018-03-26 20:25:43
【问题描述】:

我有一个带有active_admin 的 Rails4 应用程序,仅供管理员使用。我已经使用它很长时间了,并且已经按照我想要的方式对其进行了定制,并且它一直有效,但是现在,这是一个奇怪的小问题我无法解决。

我的观察--- 我的布局有active_admin.html.erbapplication.html.erb。当我重命名我的active_admin.html.erb 或删除它时......自定义操作可以正常工作并呈现,但其他页面显示包含两个页眉、正文和页脚的双重内容呈现,但是当我保持管理布局一切正常,但自定义操作呈现空白布局。

我在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" = $1 AND ("activities"."owner_id" IS NOT NULL)  [["trackable_id", 1021]]
      PublicActivity::Activity Load (1.5ms)  SELECT  "activities".* FROM "activities" WHERE "activities"."trackable_id" = $1 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" = $1 LIMIT 1  [["id", 3]]
      Announcement Load (1.4ms)  SELECT  "announcements".* FROM "announcements" WHERE "announcements"."id" = $1 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)

谁能帮我弄清楚这里出了什么问题。

提前致谢。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 activeadmin


    【解决方案1】:

    默认情况下,ActiveAdmin 会绕过 Rails ActionView 布局,转而使用 Arbre 内置的 Views::Pages 组件。因此 ActiveAdmin 中的 active_admin.html.arb 包含

    insert_tag view_factory.layout
    

    并且您不应该覆盖它。 ActiveAdmin 不使用 application.html.erb,这让我认为您可能正在使用 Active Admin Custom Layout gem。您能否确认一下,以及您使用的是 RubyGems 的 ActiveAdmin 版本还是 GitHub 的最新版本? Active Admin 中的自定义页面实际上是唯一使用 ActiveAdmin::Views::Pages::Layout 的页面,然后调用 ActionView 的 content_for_layout:一个潜在的混乱来源,并且可能是您遇到的不一致行为的原因。

    【讨论】:

    • 谢谢@Piers C,来自 Rubygems 的 ActiceAdmin 和来自 GitHub 的那个是一样的......这就是我的想法......如果我错了,请纠正我。我使用 gem 直接指定它Gemfile。我应该怎么做?您需要更多详细信息以便您可以帮助我。
    • 查看我的 Gemfile 后...这是我发现的 -。 gem 'activeadmin', git: 'github.com/activeadmin/activeadmin.git' 这就是我在 Gemfile 中的全部内容。我没有使用 gem 'activeadmin_custom_layout'
    • 好的,您使用的是来自 GitHub 的 2.0.alpha,并且没有自定义布局 gem。在这种情况下,您不应定义自己的 active_admin.html.erb 并且不要在控制器中指定布局。我不清楚您实施了哪些自定义并试图保留。
    【解决方案2】:

    好吧,现在我知道是什么原因了。查看日志清楚地提到了一些关于布局的内容,当我搜索代码时,我发现有一个代码可以覆盖 ActiveAdmin 的 BaseController。我现在删除了该代码现在它以我想要的方式工作。我正在分享下面导致问题的代码......

    ###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 代码,默认情况下,它可以完美运行,无需添加自定义代码。但是,我想在 body 标记中添加自定义属性,我可以轻松添加 initializers/active_admin.rb

    希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2016-04-11
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-18
      相关资源
      最近更新 更多