我为附件重新使用了一个面板,显示在 show
block 中。
我希望它也显示在 form
block 上,用于编辑。
这可能吗?
我试过这样的:
form do |f|
#! attachments_panel:
panel "Attachments" do
ul do
# (..) li components
end
#! Editing form
f.inputs 'Details' do
f.input :name
# (..) other inputs
end
end
但它只是显示面板,不包含表单。 改变另一个也只显示面板。
编辑:基于@CMaresh 的解决方案,我创建了一个初始化程序来对 ActiveAdmin gem 进行猴子修补。
#! config/initializers/active_admin_patches.rb
ActiveAdmin::FormBuilder.class_eval do
def append_panel(&block)
self.form_buffers.last << Arbre::Context.new({}, self.template, &block)
end
end
这样,它允许使用原始示例代码如下:
form do |f|
#! attachments_panel:
f.append_panel do # <----
panel "Attachments" do
ul do
# (..) li components
end
end
#! Editing form
f.inputs 'Details' do
f.input :name
# (..) other inputs
end
end
最佳答案
该问题是由底层形式和 Arbre 缓冲区的功能引起的。这两种缓冲技术彼此不太兼容,但要完成您想要的操作,您可以直接对表单的缓冲区进行操作:
form do |f|
f.form_buffers.last << Arbre::Context.new({}, f.template) do
panel "Panel Above Form" do
ul do
li "item 1"
li "item 2"
end
attributes_table_for(f.object) do
row :name
end
end
end
f.inputs
end
Arbre::Context有两个参数:一个赋值散列和一个助手对象。重要的是传入 f.template
以提供对 View 中可用的所有相同辅助方法的访问。
一个应用程序助手
可以编写一个助手来减轻每次创建新上下文的噪音:
# app/helpers/application_helper.rb
module ApplicationHelper
def append_arbre(f, &block)
f.form_buffers.last << Arbre::Context.new({}, f.template, &block)
end
end
# app/admin/resource.rb
form do |f|
append_arbre(f) do
panel "Panel Above Form" do
para "Without all the noise."
end
end
f.inputs
end
关于ruby-on-rails - ActiveAdmin:如何将面板添加到表单 block 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20010067/