ActiveAdmin索引 - 对count列进行排序或过滤?

时间:2015-11-12 19:44:32

标签: ruby-on-rails activeadmin

我需要在ActiveAdmin视图中对列进行排序/过滤。该列是子对象的计数。具体来说,模型看起来像:

class Location < ActiveRecord::Base
...
has_many :things
...

ActiveAdmin页面需要​​有一个列,我喜欢这个:

column 'Thing Count', :sortable => 'Thing Count' do |location|
  location.things.length
end

然而,排序实际上并不起作用,我也无法找到一种方法来进行过滤工作。我尝试了几种变体:

:filter 'Thing Count'

没有成功。有没有人成功获得ActiveAdmin来对子对象的count列进行排序或过滤?如果是这样的话?谢谢!

2 个答案:

答案 0 :(得分:1)

ActiveAdmin只能对数据库列进行过滤。

您可以执行以下操作:

  1. belongs_to侧/ Thing模型上创建counter_cache列。
  2. 为该列filter :things_count
  3. 制作过滤器
  4. 重新计算每件事的计数器。
  5. 示例:

    def up
      add_column :projects, :tasks_count, :integer, :default => 0
    
      Project.reset_column_information
      Project.find(:all).each do |p|
        Project.update_counters p.id, :tasks_count => p.tasks.length
      end
    end
    
    def down
      remove_column :projects, :tasks_count
    end
    

答案 1 :(得分:0)

class Location
  has_many :things

  def self.all_things
    joins(:things).select("locations.id as loc_id, count(things.*) as count").group("locations.id").order("count(things.*)")
  end
end