ruby-on-rails - Rails 查询根据嵌套模型的计数进行排序?

标签 ruby-on-rails ruby-on-rails-3 activerecord

我有两个模型: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/

相关文章:

ruby-on-rails - ActiveAdmin 显示默认查看内容

ruby-on-rails - rails 3 : HTTP 406 and blank page on trying to view json in browser

ruby-on-rails - 使用rvm时Nginx安装在哪里

ruby-on-rails - 如何在 rjs 中使用 if 条件?

ruby-on-rails - 命名 Rails 模型以避免冲突的好方法是什么?

mysql - Ruby(不是 Rails)在使用 find() 时给出 NoMethodError

ruby-on-rails - ActiveRecord::Relation.concat 在 Rails 5 中失败

ruby-on-rails - Rails 应用程序中需要调整以使用 Datamapper 而不是 ActiveRecord

ruby-on-rails - sidekiq 后台作业发送电子邮件和 heroku worker

javascript - Uncaught ReferenceError : $ is not defined in Rails 5. 2