私には一連のユーザーがいて、それぞれが多数の投稿を行っています(そして、投稿は「ビュー」を受け取ります)。これまで、さまざまな方法でそれらを並べ替えてきました。
たとえば、最も閲覧された8人のユーザーは次のとおりです。
@most_viewed = User.sort_by{|user| user.views}
そして、私のモデルでは、user.rbファイル:
def views
self.posts.sum(:views) || 0
end
これは過去にうまく機能しました。
問題は、私のソートでsort_byメソッドを使用したことです。これは、RelationではなくArrayを返すため、will_paginategemではうまく機能しません。
Rails 3、Active Record Relation、Lazy Loadingスタイルで次のことを行うにはどうすればよいですか?たとえば、名前付きスコープとして?
- 少なくとも1つの投稿があるユーザー
- 投稿の合計視聴回数が最も多いユーザー
- 閲覧数が最も多い投稿を持つユーザー(合計ではない)
- 最新の投稿を持つユーザー
- 投稿数が最も多いユーザー