ruby-on-rails – ActiveAdmin:如何将Panel添加到Form块中?
发布时间:2020-12-17 02:46:27 所属栏目:百科 来源:网络整理
导读:我重新使用了附件的面板,显示在显示块上. 我希望它也会显示在表单块上,用于编辑. 那可能吗? 我尝试过这样的事情: form do |f| #! attachments_panel: panel "Attachments" do ul do # (..) li components end #! Editing form f.inputs 'Details' do f.inp
我重新使用了附件的面板,显示在显示块上.
我希望它也会显示在表单块上,用于编辑. 那可能吗? 我尝试过这样的事情: 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的解决方案,我创建了一个初始化器,用于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 这样,它允许使用原始示例代码,如下所示: 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以提供对视图中可用的所有相同辅助方法的访问非常重要. 一个ApplicationHelper 可以编写帮助程序以减轻每次创建新上下文的噪音: # 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |