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

Pet*_*ter 1 ruby activeadmin

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

\n\n

设置是这样的:

\n\n
ActiveAdmin.register Bar do\n  # \xe2\x80\xa6\n  index do\n    column :name\n    column :phone\n    column :address\n  end\n  # \xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
ActiveAdmin.register Bar do\n  # \xe2\x80\xa6\n  index do\n    column :name\n    column :price\n    column :bartender\n  end\n\n  index name: \'location\' do\n    column :name\n    column :phone\n    column :city\n    column :country\n  end\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后只需在某处获取附加选项卡即可。

\n\n

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

\n\n

ActiveAdmin 文档展示了一种轻松添加第二/第三/等索引页面的方法,但类型不同:

\n\n
index as: :grid do |bar|\n  link_to(image_tag(bar.photo_path), admin_bar_path(bar))\nend\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n

Pet*_*ter 5

有一个技巧。

\n\n

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

\n\n
index as: CustomTableIndex do\n  # \xe2\x80\xa6\nend\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

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

\n\n
    \n
  1. 创建一个子类ActiveAdmin::Views::IndexAsTable
  2. \n
  3. 在子类中定义一个类方法index_name,名称为新索引页
  4. \n
  5. 将新类传递给index方法
  6. \n
  7. 为新选项卡按钮添加 i18n 翻译(如有必要)
  8. \n
\n\n

app/admin/bars.rb

\n\n
ActiveAdmin.register Bar do\n\n  # \xe2\x80\xa6\n\n  # 1.\n  class MyLocationIndex < ActiveAdmin::Views::IndexAsTable\n    # 2.\n    def self.index_name\n      "bars_location"\n    end\n  end\n\n  # 3.\n  index as: MyLocationIndex do\n    column :name\n    column :phone\n    column :city\n    column :country\n  end\n\n  # \xe2\x80\xa6\n\nend\n
Run Code Online (Sandbox Code Playgroud)\n\n

config/locales/admin.yml

\n\n
en:\n  # \xe2\x80\xa6\n  active_admin:\n    index_list:\n      bars_location: "Locations"\n
Run Code Online (Sandbox Code Playgroud)\n