How to get highest count of associated model (Rails)?

人走茶凉 提交于 2019-12-08 16:18:15

问题


A User has_many Solutions

How do I order Users by those with the most Solutions?

I'm trying to find the top ten users but I'm not sure how the most tidy or efficient way to do this?

Does anyone have an example that isn't too computationally expensive?


回答1:


If you really want a fast way of doing it, put a counter_cache on a users' solutions (have a solutions_count column in your User) and order by that column. You don't need to manage that counter, because rails does it for you. You can read more about counter_cache in the Rails Guides




回答2:


User
  .joins(:solutions)
  .select("users.*, count(solutions.id) as scount")
  .group("users.id")
  .order("scount DESC")



回答3:


Assuming the following models

class User
  has_many :solutions
end

class Solution
 belongs_to :user
end

Then the best way is to counter_cache the solutions_count and order by it. more on counter_cache

The query will then be

User.order("users.solutions_count DESC").limit(10)

Don't forget to index the solutions_count column.



来源:https://stackoverflow.com/questions/9739451/how-to-get-highest-count-of-associated-model-rails

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!