* Converts queries to use active record instead of raw sql. This ensures that user objects are loaded by rails in the join, so that we don't have to issue `User.find` calls to load users one-by-one. * Use `.includes` to preload associations used in the view, to avoid additional N+1 query problems (primarily, calls to link_to_user also causing users to be loaded one-by-one).
19 lines
483 B
Ruby
19 lines
483 B
Ruby
module Moderator
|
|
module Dashboard
|
|
module Queries
|
|
class Upload < ::Struct.new(:user, :count)
|
|
def self.all(min_date, max_level)
|
|
::Post.joins(:uploader)
|
|
.where("posts.created_at > ?", min_date)
|
|
.where("users.level <= ?", max_level)
|
|
.group(:uploader)
|
|
.order("count(*) desc")
|
|
.limit(10)
|
|
.count
|
|
.map { |user, count| new(user, count) }
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|