簡體   English   中英

ActiveAdmin:如何將Panel添加到Form塊中?

[英]ActiveAdmin: how to add a Panel into a Form block?

我重新使用了附件的面板,顯示在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

但它只是顯示小組,表格不包括在內。 改變另一個也只顯示面板。


編輯:根據@ 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有兩個參數:一個是hash,一個是helpers對象。 傳遞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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM