ruby-on-rails - ActiveAdmin:如何将面板添加到表单 block 中?

标签 ruby-on-rails ruby forms activeadmin

我为附件重新使用了一个面板,显示在 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/

相关文章:

ruby-on-rails - Redis中的过期键

ruby-on-rails - rails 单元测试失败 "undefined method ' 请求 ='"

ruby-on-rails - 如何在 Rails 中使用带有对象数组的强参数

JavaScript 确认()无法正常工作

ruby-on-rails - 使用 Capistrano 3 在部署时设置 secret_key_base

ruby-on-rails - Net::SMTPFatalError 554 消息被拒绝:电子邮件地址未验证

ruby-on-rails - Ruby on Rails+PostgreSQL : usage of custom sequences

ruby-on-rails - Ruby - 如何在 View 中获取关联哈希值?

javascript - Angular JS 中的多个必填字段

jquery - 如何使用 Ajax 将图像发送到 PHP 文件?