我有两个模型:Group 和 GroupMember
我想返回按最高组成员计数排序的组?如何在 Rails 中设置这种类型的连接/查询计数?
最佳答案
使用 counter_cache,生活变得更加轻松:
$ rails g migration add_group_member_counts_to_groups
# migration
def change
add_column :groups, :group_members_count, :integer, default: 0
end
class GroupMember < ActiveRecord::Base
belongs_to :group, counter_cache: true
end
class Group < ActiveRecord::Base
has_many :group_members
scope :order_by_group_members_count, order('group_members_count DESC')
end
Group.order_by_group_members_count # => What you're looking for
只有一个查询,仅在组表上。
编辑
如果您需要重置group_members_count:
ids = Group.select(:id).map &:id
ids.each do |id|
Group.reset_counters(id, :group_members)
end
(因为reset_counters不接受ID数组)
future Rails 3.2.0 ,你会写:
ids = Group.pluck(:id)
我等不及了;-)
关于ruby-on-rails - Rails 查询根据嵌套模型的计数进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8407939/