Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 按关注者数量对用户进行排序_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 按关注者数量对用户进行排序

Ruby on rails 按关注者数量对用户进行排序,ruby-on-rails,ruby,Ruby On Rails,Ruby,我在应用程序中使用了一个简单的follower系统,通过运行user.followers.count,我可以获得任何用户的追随者数量。但是,当我尝试使用@orderedUsers=User.all.order(“followers.count DESC”)按每个用户的关注者数量对所有用户进行排序时,它返回错误“ActiveRecord::StatementInvalid:SQLite3::SQLException:没有这样的列:followers.count”。显然,这是因为没有这样的专栏。有没

我在应用程序中使用了一个简单的follower系统,通过运行
user.followers.count
,我可以获得任何用户的追随者数量。但是,当我尝试使用
@orderedUsers=User.all.order(“followers.count DESC”)
按每个用户的关注者数量对所有用户进行排序时,它返回错误“ActiveRecord::StatementInvalid:SQLite3::SQLException:没有这样的列:followers.count”。显然,这是因为没有这样的专栏。有没有办法解决这个问题来实现我的愿望


谢谢。

像这样的东西怎么样:

@ordered_users = User.all.sort{|a,b| a.followers.count <=> b.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}
@ordered_users=User.all.sort{| a,b | b.followers.count a.followers.count}
或者,
.reverse
,正如您在评论中所说

编辑:@Alex Quach在另一篇帖子中留下了一个不错的选择。我对其进行了修改,使其不包括列表中的当前用户,这可能会有所帮助:


User.all.where('id!=?',current_User.id).按{u |-u.followers.count}排序

类似于:

@ordered_users = User.all.sort{|a,b| a.followers.count <=> b.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}
@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}

此代码应该有效(假设DB表名为用户和跟随者):

此代码应该可以工作(假设DB表名是用户和跟随者):


<>我强烈考虑在用户模型上使用计数器缓存,以保存追随者的计数。< /P> 这将对添加或删除跟随者产生非常小的性能影响,并在执行排序时大大提高性能:

User.order(followers_count: :desc)

<>这将是特别值得注意的,如果你想通过追随者计数的顶端N个用户,或找到没有追随者的用户。

< P>我强烈考虑在用户模型上使用计数器缓存,以保存追随者的数量。< /P> 这将对添加或删除跟随者产生非常小的性能影响,并在执行排序时大大提高性能:

User.order(followers_count: :desc)

如果您希望按关注者数量排名前n位的用户,或者查找没有关注者的用户,这一点尤其明显。

非常感谢!我所要做的就是在它的末尾添加
.reverse
,使它按降序显示。谢谢您的帮助:)@Collin您可以交换计数以反转排序。无需反转已排序的数组。@ReinHenrichs-很好,谢谢。另外,我不知道这在一行代码中是否可行,但我该如何获得该列表中的前100名,然后从该列表中随机选择5名?我环顾四周,完全不知道这是否可以实现。@Collin似乎我们大多数人都忽略了这是SQL查询的结果这一事实。您不应该在Ruby中对SQL查询的结果进行排序:您应该像Deekshith的回答一样在查询中包含排序条件。@jvillian-好建议。我开始问一个新问题,非常感谢!我所要做的就是在它的末尾添加
.reverse
,使它按降序显示。谢谢您的帮助:)@Collin您可以交换计数以反转排序。无需反转已排序的数组。@ReinHenrichs-很好,谢谢。另外,我不知道这在一行代码中是否可行,但我该如何获得该列表中的前100名,然后从该列表中随机选择5名?我环顾四周,完全不知道这是否可以实现。@Collin似乎我们大多数人都忽略了这是SQL查询的结果这一事实。您不应该在Ruby中对SQL查询的结果进行排序:您应该像Deekshith的回答一样在查询中包含排序条件。@jvillian-好建议。我开始问一个新问题