代码之家  ›  专栏  ›  技术社区  ›  Milind

Rails 4-ActiveAdmin布局为空,但应用程序布局适用于自定义控制器操作

  •  0
  • Milind  · 技术社区  · 6 年前

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

    我的观察结果--- 我的布局有 active_admin.html.erb application.html.erb 。当我重命名active\u admin时。html。erb或将其删除。。自定义操作可以正常工作并呈现,但其他页面会显示包含两个页眉、正文和页脚的双重内容呈现,但当我保持管理布局时,所有内容都正常工作,但自定义操作呈现空白布局。

    我的控制器块中有一个自定义操作 admin/hall.rb 模型,它也将根据服务器日志执行,服务器日志也包括active\u 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)
    

    谁能帮我找出这里出了什么问题吗。

    提前谢谢。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Piers C    6 年前

    默认情况下,ActiveAdmin会绕过Rails ActionView布局,而使用自己的视图::页面组件(内置于Arbre中)。因此是active\u admin。html。ActiveAdmin中的arb包含

    insert_tag view_factory.layout
    

    您不需要覆盖它。ActiveAdmin不使用应用程序。html。erb,这让我觉得您可能正在使用Active Admin自定义布局gem。您能否确认这一点,以及您使用的是RubyGems的ActiveAdmin版本还是GitHub的最新版本?实际上,Active Admin中的自定义页面是唯一使用ActiveAdmin::Views::pages::Layout的页面,后者会调用ActionView的content\u for\u Layout:这可能会造成很多混淆,也可能是您遇到的不一致行为的原因。

        2
  •  0
  •   Milind    6 年前

    现在我知道原因了。通过查看日志,我清楚地提到了一些关于布局的内容,当我搜索代码时,我发现有一个代码可以覆盖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\u adin代码,默认情况下,它可以完美工作,无需添加任何自定义代码。但是,我想在body标记中添加自定义属性,我可以轻松地将其添加到body标记中 initializers/active_admin.rb

    希望这对别人有帮助。