我正在使用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'
答案 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语句然后你可以调用分页