Rails - ActiveAdmin创建关系计数列可排序

时间:2017-06-05 12:27:51

标签: ruby-on-rails activeadmin columnsorting

我正在使用ActiveAdmin,我正在尝试显示带有计数的列名Active Jobs

获得此计数涉及三个模型

 1. Staffroom 
 2. StaffroomPage
 3. Job



class StaffroomPage < ActiveRecord::Base
  belongs_to :staffroom

class Staffroom < ActiveRecord::Base
  has_one :staffroom_page
  has_many :jobs

class Job < ActiveRecord::Base
  belongs_to :staffroom

现在在admin/staffroom_pages.rb内我可以显示列和计数

column :active_jobs, sortable: 'active_jobs' do |staffroom_page|
  staffroom_page.staffroom.jobs.where(:state=> 'active').count
end

但是我无法通过active_jobs对数据进行排序,我看到以下错误

  

PG :: UndefinedColumn:ERROR:列“active_jobs”不存在

所以问题是如何使排序适用于列active_jobs,请注意,这不是页面上唯一的可排序列,几乎所有列都是可排序的,这是唯一一个不起作用的列。 / p>

2 个答案:

答案 0 :(得分:1)

来自activeadmin github上的this post,可能解决此问题的方法是

index do
  column :active_jobs, sortable: 'active_jobs' do |staffroom_page|
    staffroom_page.staffroom.jobs.where(:state=> 'active').count
  end
end

controller do


def scoped_collection
  super.joins(
    %(LEFT JOIN "jobs" ON "staffroom_pages"."staffroom_id" = "jobs"."staffroom_id"
        AND "jobs"."state" = 'active'))
      .select('staffroom_pages.*, COUNT(jobs.id) as active_jobs')
      .group('staffroom_pages.id')
  end
end

答案 1 :(得分:0)

您是否查看了custom sorting上的文档?