订购具有最多歌曲描述的用户

时间:2011-07-20 20:57:33

标签: ruby-on-rails ruby database ruby-on-rails-3 models

希望是一个简单的问题。我有几个模型,其中两个,: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,我想可以通过列出所有歌曲并由用户对它们进行分组来完成,但我觉得这样做效率不高。 - 你可以看到我不是高级开发人员。

如果可能的话,请告诉我你们的想法以及解决方案的答案。令我困惑的是,我正在按照另一个表生成的数据从表中生成一个列表。必须简单,但我之前没有这样做,所以我无法理解它。

先谢谢。

2 个答案:

答案 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")