按照关注者数排序用户

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

谢谢。

怎么样的:

 @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} 

或者,正如你在评论中所说的那样。

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

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

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

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

我强烈建议在User模型上使用计数器缓存来保存关注者的数量。

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

 User.order(followers_count: :desc) 

如果您希望通过关注者计数排名前n位的用户,或找到没有关注者的用户,这将特别明显。