我如何使用.sort()创建关系?

时间:2012-07-03 18:03:05

标签: ruby-on-rails ruby ruby-on-rails-3 pagination kaminari

我正在使用kaminari宝石进行分页。我有一个资源控制器,它完美地分页(由于订购的简单性质)。这可以在这里看到:

@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 page'

2 个答案:

答案 0 :(得分: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?

答案 1 :(得分:0)

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

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