在activeadmin资源索引页面上分组记录

时间:2013-06-27 17:42:15

标签: ruby-on-rails ruby-on-rails-3.2 grouping activeadmin

我有2个资源 - 书架和书,每个书架都有很多书。

有没有办法按书架分组书籍(在书籍索引页面上)?具体来说,我希望书架按书架排序,每当货架更​​改时,我想在书籍清单上注明(在一个书架上的书籍和另一个书籍之间插入一个带有新书架名称的h3标题)

我使用的是rails 3.2和activeadmin 0.6.0。

2 个答案:

答案 0 :(得分:3)

在Rails 4.2.5.2上使用ActiveAdmin 1.0.0.pre2,结果非常简单。解决方案基本上只有20行自定义ActiveAdmin视图类。

  

请注意第一行的文件名,作为提示放置代码或对现有文件进行添加/更改的位置。

# config/application.rb
module MyApp
  class Application < Rails::Application
    config.autoload_paths << config.root.join('lib')
  end
end
# models/book.rb
class Book < ActiveRecord::Base
  belongs_to :shelf

  def shelf_name
    shelf.name
  end
end
# admin/books.rb
ActiveAdmin.register Book do
  index as: :grouped_table, group_by_attribute: :shelf_name do
    # columns
  end
end
# lib/active_admin/views/index_as_grouped_table.rb
require 'active_admin/views/index_as_table'

module ActiveAdmin
  module Views
    class IndexAsGroupedTable < IndexAsTable

      def build(page_presenter, collection)
        if group_by_attribute = page_presenter[:group_by_attribute]
          collection.group_by(&group_by_attribute).sort.each do |group_name, group_collection|
            h3 group_name
            super page_presenter, group_collection
          end
        else
          super
        end
      end

    end
  end
end

让我解释他妈的在index_as_grouped_table.rb中发生了什么:

IndexAsGroupedTable扩展了ActiveAdmin的IndexAsTable类,并覆盖了build方法以添加分组功能。 在您的admin/books.rb文件中,在索引宏中,您定义了一个附加选项:group_by_attribute,该选项命名要分组的Book类的属性名称。 如果未提供该属性,则会回退到IndexAsTable的行为。 如果提供了该属性,它将按该属性收集group_bysort哈希并从该哈希中运行每个group_namegroup_collection的块,使用<h3>打印group_name,然后只需调用IndexAsTable build方法(super)即可显示标准表格。

如您所见,只对组进行排序并将h3添加到页面中。其他一切都像标准索引表一样。

  

注意:这不涉及用于分组的额外sql。这使用了Enumerable类的ruby的group_by方法。因此,如果集合中有很多行,它可能会很慢。

获取最新版本和/或分支转到我的my gist on github

该方法的

积分转到ariejan de vroom

答案 1 :(得分:1)

听起来像是自定义页面的作业

http://www.activeadmin.info/docs/10-custom-pages.html

  1. 通过在Active Admin控制器中传递有序的@books

  2. 然后在内容块中使用table_for(可能是每个架子的新表格?或者顶部的架子搜索字段。 http://blog.agile-pandas.com/2011/07/06/activeadmin-beyond-the-basics

  3. :)