Ruby on rails 如何使用.sort()创建关系?

Ruby on rails 如何使用.sort()创建关系?,ruby-on-rails,ruby,ruby-on-rails-3,pagination,kaminari,Ruby On Rails,Ruby,Ruby On Rails 3,Pagination,Kaminari,我正在使用kaminari gem进行分页。我有一个完全分页的资源控制器(由于排序的简单性质)。可以在这里看到: @resources = Resource.order("created_at desc").page(params[:page]).per(25) 这只是按照最新的优先顺序对它们进行排序。当我执行.class时,它似乎是一个activerecord::relation 但是,在我的标记上,我想按关系(分配给该标记的资源数量)对它们进行排序 @tags=Tag.all.sort{a

我正在使用kaminari gem进行分页。我有一个完全分页的资源控制器(由于排序的简单性质)。可以在这里看到:

@resources = Resource.order("created_at desc").page(params[:page]).per(25)
这只是按照最新的优先顺序对它们进行排序。当我执行.class时,它似乎是一个activerecord::relation

但是,在我的标记上,我想按关系(分配给该标记的资源数量)对它们进行排序

@tags=Tag.all.sort{a,b | b.number_of_resources a.number_of_resources}.page(参数[:page])。per(50)

但是,它给出了#`

标记的
undefined method
page'错误。all
返回一个数组,因此您的#page调用失败,因为它需要ARel关系

如果#number_of_resources映射到一个DB列,那么您需要做的就是:

Tag.order('number_of_resources').page(params[:page]).per(50)
如果不是,则需要将其添加到标记数据库表中,或者只使用Ruby进行排序/分页,而不是使用kaminari。如果标签数量小于1000个左右,这将是可行的


如果您确实将信息添加到数据库中,请查看此帖子:

您应该执行以下操作:1)连接两个表,2)按标记分组行,3)计算每个组所属的行数,4)使用新列和计数进行排序

您应该创建一个好的sql语句,然后可以调用分页

可能的重复
Tag.order('number_of_resources').page(params[:page]).per(50)