按照关注者数排序用户

时间:2017-07-11 00:59:46

标签: ruby-on-rails ruby

我在我的应用程序中使用了一个简单的关注者系统,我可以通过运行User.followers.count来获取任何用户关注者的数量。但是,当我尝试按照每个用户@orderedUsers = User.all.order("followers.count DESC")的跟随者数量对所有用户进行排序时,它会返回错误“ActiveRecord :: StatementInvalid:SQLite3 :: SQLException:no such column:followers.count”。显然,这是因为没有这样的专栏。有没有办法解决这个问题,做我想做的事情?

感谢。

3 个答案:

答案 0 :(得分:3)

此代码应该有效(假设数据库表名是用户和关注者):

User.joins(:followers).order("count(followers.user_id) desc")

答案 1 :(得分:1)

如下:

@ordered_users = User.all.sort{|a,b| a.followers.count <=> b.followers.count}

对于相反的顺序,你可以这样做:

@ordered_users = User.all.sort{|a,b| b.followers.count <=> a.followers.count}

或者,.reverse,正如您在评论中所说的那样。

编辑:@Alex Quach在另一篇文章中留下了不错的选择。我已将其修改为不包含列表中当前用户的位置,这可能会有所帮助:

User.all.where('id != ?', current_user.id).sort_by { |u| -u.followers.count }

答案 2 :(得分:0)

我强烈建议在用户模型上使用计数器缓存,以保留关注者的数量。

这会对添加或删除关注者产生非常小的性能影响,并在执行排序时大大提高性能:

User.order(followers_count: :desc)

如果您想通过关注者计数排名前n位的用户,或者找不到关注者的用户,那么这一点尤为明显。