seq*_*elo 4 ruby forms ruby-on-rails activeadmin
我重新使用了附件的面板,它显示在show块上.
form对于编辑,我也想在块上显示.
那可能吗?
我尝试过这样的事情:
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
Run Code Online (Sandbox Code Playgroud)
但它只是显示小组,表格不包括在内.改变另一个也只显示面板.
编辑:根据@ CMaresh的解决方案,我创建了一个初始化器,用于monkeypat the 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
Run Code Online (Sandbox Code Playgroud)
这样,它允许使用原始示例代码,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
这个问题是由底层形式和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
Run Code Online (Sandbox Code Playgroud)
该ARBRE ::语境下有两个参数:一个受让人哈希和助手对象.传入f.template以提供对视图中可用的所有相同辅助方法的访问非常重要.
可以编写帮助程序以减轻每次创建新上下文的噪音:
# 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
Run Code Online (Sandbox Code Playgroud)