活动管理员排序has_many列的计数

时间:2014-02-13 03:29:55

标签: ruby-on-rails sorting activeadmin

使用Active Admin框架,我可以添加一个“用户”列,通过执行以下操作来计算特定“俱乐部”的计数:

ActiveAdmin.register Club do
  index do
    column 'Users' do |club|
      club.users.count
    end
  end
end

我能以某种方式对此进行排序吗?

2 个答案:

答案 0 :(得分:4)

您可以在User型号belongs_to :club上添加counter cache column,然后将索引设为:

ActiveAdmin.register Club do
  index do
    column 'Users', sortable: :users_count do |club|
      club.users.count
    end
  end
end

答案 1 :(得分:0)

另一种选择是让您的嵌套资源加入并提供特定的列名称。在我的示例中,问题有很多答案示例。

controller do
    def scoped_collection
        # super.includes(:answer_examples)
        super.joins(
            %(LEFT OUTER JOIN "answer_examples"
                ON ("questions"."id" = "answer_examples"."question_id")))
            .select("questions.*, COUNT(answer_examples.id) AS answer_examples_count")
            .group("questions.id")
    end
end

然后你可以这样做:

column "Number of examples", sortable: "answer_examples_count" do |question|
        question.answer_examples.count
end

更多详情: https://stackoverflow.com/a/44370320/12004339