我正在寻找一种配置特定 ActiveAdmin 资源的方法,以便其所有操作在没有布局的情况下呈现,而其他资源保留默认布局。 (该资源的操作正在 AJAX 对话框中呈现,因此我不需要布局,只需要主要内容。)
这不起作用:
controller do
layout nil
end
我使用的是1.0.0。有办法做到这一点吗?
我不相信 nil 在这里会起作用。你会想使用 false。如:
layout false
根据本指南,您还可以告诉 Rails 完全不使用布局进行渲染:
controller do
render layout: false
end
如果您的模型名为
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
或其他位置。
这对我有用:
controller do
layout false, only: [:load_help_page]
我认为这违背了使用 ActiveAdmin 的目的,ActiveAdmin 的主要功能是生成 HTML 视图。
layout false
不起作用,因为 ActievAdmin 在 Rails ActionView 之上提供了自己的渲染层。您可以结合使用 ActiveAdmin 和 Rails API,如 Charlie Gleason 的热门博客中所述。