1

我正在使用 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(params[:page]).per(50)

它给了我错误但是undefined method页面'为#`

4

2 回答 2

0

您应该执行以下操作:1)连接两个表,2)按标签对行进行分组,3)计算每个组有多少行,4)使用带有计数的新列进行排序

你应该做一个好的sql语句然后你可以调用分页

于 2012-07-03T22:00:28.123 回答
0

Tag.all返回一个数组,因此您的 #page 调用失败,因为它需要一个 ARel 关系。

如果 #number_of_resources 映射到数据库列,那么您需要做的就是:

Tag.order('number_of_resources').page(params[:page]).per(50)

如果不是,您要么需要将其添加到 Tag 数据库表中,要么只在 Ruby 中进行排序/分页,而不是使用 kaminari。如果标签数量低于约 1000 个左右,这将是可行的。

如果您确实将信息添加到数据库,请查看这篇文章:Counter Cache for a column with conditions?

于 2012-07-03T18:26:24.423 回答