某些管理员的用户需要有两个表视图,例如一个模型Bar:他们已经拥有的默认表视图和具有不同列集的附加新表视图。
设置是这样的:
\n\nActiveAdmin.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\nRun Code Online (Sandbox Code Playgroud)\n\n预计就像添加另一个index块一样简单,如下所示:
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\nRun Code Online (Sandbox Code Playgroud)\n\n然后只需在某处获取附加选项卡即可。
\n\n正如您可能猜到的那样,事情并不那么简单。ActiveAdmin 现在对虚构index name:属性一无所知,只是默默地选择第一个index块,忽略第二个index块。
ActiveAdmin 文档展示了一种轻松添加第二/第三/等索引页面的方法,但类型不同:
\n\nindex as: :grid do |bar|\n link_to(image_tag(bar.photo_path), admin_bar_path(bar))\nend\nRun Code Online (Sandbox Code Playgroud)\n\n很好,但是如何添加具有不同列的索引表视图的副本?
\n有一个技巧。
\n\n如前所示,ActiveAdmin 的index方法允许as:参数的索引类型编码为符号(ATM,其中之一::block、:blog和:grid):table。除了符号(只是一些内部 AA 类的快捷方式)之外,还可以传递任何 Ruby 类:
index as: CustomTableIndex do\n # \xe2\x80\xa6\nend\nRun Code Online (Sandbox Code Playgroud)\n\n下面是解决方案的代码。\n为我们的新表索引页要做四件事:
\n\nActiveAdmin::Views::IndexAsTableindex_name,名称为新索引页index方法在app/admin/bars.rb:
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\nRun Code Online (Sandbox Code Playgroud)\n\n在config/locales/admin.yml:
en:\n # \xe2\x80\xa6\n active_admin:\n index_list:\n bars_location: "Locations"\nRun Code Online (Sandbox Code Playgroud)\n