我有这些联想:
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
那么,将排序添加到自定义列的最佳方法是什么,我做错了什么?感谢。
答案 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