【问题标题】:ActiveAdmin: how to add second custom index table pageActiveAdmin:如何添加第二个自定义索引表页面
【发布时间】:2014-09-04 18:21:26
【问题描述】:

某些管理员的用户需要有两个表视图,例如一个模型 Bar:默认一个他们已经拥有,另一个新的具有不同的列集。

设置是这样的:

ActiveAdmin.register Bar do
  # …
  index do
    column :name
    column :phone
    column :address
  end
  # …

预计就像添加另一个 index 块一样简单,如下所示:

ActiveAdmin.register Bar do
  # …
  index do
    column :name
    column :price
    column :bartender
  end

  index name: 'location' do
    column :name
    column :phone
    column :city
    column :country
  end

然后在某处获取附加选项卡。

正如您可能猜到的那样,事情并没有那么简单。 ActiveAdmin 现在对虚构的 index name: 属性一无所知,只是默默地选择了第一个 index 块,而忽略了第二个 index 块。

ActiveAdmin 文档显示了一种轻松但不同类型的add second/third/etc index page 方法:

index as: :grid do |bar|
  link_to(image_tag(bar.photo_path), admin_bar_path(bar))
end

很好,但是如何添加具有不同列的索引表视图的副本?

【问题讨论】:

    标签: ruby activeadmin


    【解决方案1】:

    有个窍门。

    如前所示,ActiveAdmin 的index 方法允许as: 参数的索引类型编码为符号(ATM,其中之一::block:blog:grid:table)。除了符号(这只是一些内部 AA 类的快捷方式)之外,还可以传递任何 Ruby 类:

    index as: CustomTableIndex do
      # …
    end
    

    这是解决方案的代码。 为我们的新表格索引页面做四件事:

    1. 创建ActiveAdmin::Views::IndexAsTable的子类
    2. 在子类中定义一个类方法index_name,命名为新索引页
    3. 将新类传递给index 方法
    4. 为新标签按钮添加 i18n 翻译(如有必要)

    app/admin/bars.rb:

    ActiveAdmin.register Bar do
    
      # …
    
      # 1.
      class MyLocationIndex < ActiveAdmin::Views::IndexAsTable
        # 2.
        def self.index_name
          "bars_location"
        end
      end
    
      # 3.
      index as: MyLocationIndex do
        column :name
        column :phone
        column :city
        column :country
      end
    
      # …
    
    end
    

    config/locales/admin.yml:

    en:
      # …
      active_admin:
        index_list:
          bars_location: "Locations"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多