如何在activeadmin中的索引上添加排序到自定义列?

时间:2017-11-13 08:06:04

标签: ruby-on-rails sorting activeadmin

我有这些联想:

class Event < ApplicationRecord
  has_many :users_events
  has_many :users, through: :users_events
end

class UsersEvent < ApplicationRecord
  belongs_to :user
  belongs_to :event
end

class User < ApplicationRecord
  has_many :users_events
  has_many :events, through: :users_events
end

在activeadmin中,我将索引页面显示为:

index do
  # some columns
  column :total_participants do |event|
    event.users.count
  end
  # other columns
end

这样做,本栏目中没有排序。如果我执行此操作:column(:user_count, sortable: 'users') { |event| event.users.count },则会显示排序,但查询似乎错误:Mysql2::Error: Unknown column 'users' in 'order clause': SELECT 'events'.* FROM 'events' ORDER BY 'users' desc LIMIT 30 OFFSET 0

那么,将排序添加到自定义列的最佳方法是什么,我做错了什么?感谢。

1 个答案:

答案 0 :(得分:1)

由于您需要多次使用此列,因此cache更好。 为此,最好将新列添加到名为events的{​​{1}},默认值为users_count,并在每次有新用户时将其递增:

迁移:

0

模型:

add_column :events, :users_count, default: 0
add_index :events, :users_count

我也不确定为什么要调用您的模型class UsersEvent < ApplicationRecord belongs_to :user belongs_to :event after_create -> {Event.increment_counter(:users_count, self.event.id)} end 而不是UsersEvent