2014-09-04 66 views
0

某些管理员的用户需要有两个表格视图,例如,一个模型Bar:它们已有的默认值和具有不同的一组列的附加新表格。ActiveAdmin:如何添加第二个自定义索引表页面

的设置是这样的:

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 

不错,但如何添加不同的列索引表视图的副本?

回答

2

有一个窍门。

作为显示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. 添加国际化翻译的新标签页按钮(如果需要)
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" 
相关问题