希望是一个简单的问题。我有几个模型,其中两个,:users
和:songs
,可以进行交互以从数据库中获取数据。
用户has_many :songs
。
我正在尝试找到USER INDEX
动作中歌曲最多的用户,即列出歌曲最多的10个用户,歌曲最多的用户,降序。
到目前为止,我已经users_controller
中的index
;
@users = User.all
到目前为止,我只能在视图中做users/index
;
<% @users.each do |user| %>
<%= user.name %><%= user.songs.count %>
<% end %>
Works,它会对歌曲进行计数,但我如何为大多数歌曲的用户订购?
我一直在看块内的sort_by,我想可以通过列出所有歌曲并由用户对它们进行分组来完成,但我觉得这样做效率不高。 - 你可以看到我不是高级开发人员。
如果可能的话,请告诉我你们的想法以及解决方案的答案。令我困惑的是,我正在按照另一个表生成的数据从表中生成一个列表。必须简单,但我之前没有这样做,所以我无法理解它。
先谢谢。
答案 0 :(得分:2)
你应该使用这样的东西:
User.includes(:songs).order{|x| x.songs.size}
这会在一个查询中执行所有操作,因此它应该比例如
更有效User.all.sort{|x| user.songs.size}
哪个会为每个用户执行查询
答案 1 :(得分:1)
怎么样
User.all(:limit => 10, :order => "(select count(user_id) from songs where user_id = users.id) DESC")