在 ActiveAdmin 中关闭特定资源的布局

问题描述 投票:0回答:5

我正在寻找一种配置特定 ActiveAdmin 资源的方法,以便其所有操作在没有布局的情况下呈现,而其他资源保留默认布局。 (该资源的操作正在 AJAX 对话框中呈现,因此我不需要布局,只需要主要内容。)

这不起作用:

controller do
  layout nil
end

我使用的是1.0.0。有办法做到这一点吗?

ruby-on-rails activeadmin
5个回答
1
投票

我不相信 nil 在这里会起作用。你会想使用 false。如:

layout false

0
投票

根据本指南,您还可以告诉 Rails 完全不使用布局进行渲染:

controller do
  render layout: false
end

0
投票

快速方法(没有布局文件,只有您的自定义模板):

如果您的模型名为

Invoice
并且您想要自定义展示模板:

将您的自定义模板放入

app/views/admin/invoices/show.html.erb
...html.arb
。对我来说,在 ActiveAdmin 2.9 中,它覆盖了整个 ActiveAdmin 布局。

稍微复杂一点的方式(使用自定义布局文件):

app/admin/invoices.rb

ActiveAdmin.register Invoice do
    ...
    controller do
        layout -> { action_name == 'show' ? 'invoice' : false }
    end
    ...
end

action_name
是返回当前控制器操作的 Rails 方法。上面的代码将布局设置为
app/views/layouts/invoice.html.erb
(或其他受支持的 Rails 扩展之一)。

无论我如何尝试,都无法让

layout false
甚至
layout 'somelayout'
show do; ... end
块一起使用。

将布局置于

app/views/layouts/invoice.html.erb
...html.arb
或其他位置。


0
投票

这对我有用:

controller do
   layout false, only: [:load_help_page]

-1
投票

我认为这违背了使用 ActiveAdmin 的目的,ActiveAdmin 的主要功能是生成 HTML 视图。

layout false
不起作用,因为 ActievAdmin 在 Rails ActionView 之上提供了自己的渲染层。您可以结合使用 ActiveAdmin 和 Rails API,如 Charlie Gleason 的热门博客中所述。

© www.soinside.com 2019 - 2024. All rights reserved.