0

我有一系列用户,他们每个人都发表了许多帖子(并且帖子会收到“视图”),并且我过去以各种方式对它们进行了排序。

例如,以下是浏览次数最多的 8 个用户:

@most_viewed = User.sort_by{|user| user.views}

然后在我的模型中,user.rb 文件:

def views
    self.posts.sum(:views) || 0
end

这在过去工作得很好。

问题是我的排序使用了 sort_by 方法,它不能很好地与 will_paginate gem 配合使用,因为它返回一个数组而不是关系。

如何在 Rails 3、Active Record 关系、延迟加载样式中执行以下操作?例如,作为命名范围?

  • 拥有至少一篇帖子的用户
  • 帖子总浏览量最多的用户
  • 拥有最多查看次数的帖子的用户(不是总数)
  • 拥有最新帖子的用户
  • 发帖数最多的用户
4

1 回答 1

1

您仍然可以对数组进行分页,但您必须要求 'will_paginate/array' 为此,您可以在 config/initializers 目录中创建一个文件(即:“will_paginate_array_fix.rb”)。将此添加为该文件中的唯一行:

require 'will_paginate/array'

重新启动您的服务器,您应该能够对普通的 ruby​​ 数组进行分页。

你应该使用 order 方法。这将通过 SQL 执行排序,这首先会提供更好的性能:)

User.order("users.views DESC")

或升序

User.order("users.views ASC")

这将返回一个关系,因此您可以添加其他内容,例如 where 子句、范围等。

User.order("views DESC").where("name like 'r%'")

对于名称以 r 开头的用户的有序列表

访问http://guides.rubyonrails.org/active_record_querying.html获取官方解释

于 2013-01-26T00:32:47.697 回答