ActiveAdmin:如何添加第二个自定义索引表页面

时间:2014-09-04 10:21:26

标签: ruby activeadmin

某些管理员的用户需要拥有两个表格视图,例如模型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

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

1 个答案:

答案 0 :(得分:3)

有一招。

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

:table

以下是解决方案的代码。 我们的新表索引页要做的四件事:

  1. 创建index as: CustomTableIndex do # … end
  2. 的子类
  3. 在子类中定义一个类方法ActiveAdmin::Views::IndexAsTable,其名称为新索引页
  4. 将新课程传递给index_name方法
  5. 为新标签按钮添加i18n翻译(如有必要)
  6. index中的

    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