Во-первых, вы действительно должны использовать: include вместо: joins
User.find(:all, :include => { :abuse_reports => [ :game ] }, :order => )
или, в вашем случае, попробуйте
User.page(params[:page], :include => { :abuse_reports => [ :game ] })
Это будет выполнять объединение для вас и извлекать записи одним выстрелом.
Теперь, это может получить определенную запись игры для вас несколько раз (если одна и та же игра связана с пользователем несколькими отчетами.) Если ваша запись игры велика, вы можете уменьшить объем данных, которыми обмениваются ваше приложение и СУБД выглядит следующим образом:
class User < ActiveRecord::Base
has_many :abuse_reports
has_many :abused_games, :through => :abuse_reports
end
...
User.find(:all, :include => [ :abuse_reports, :abused_games ])
Наконец, вы также хотите получить количество и отсортировать их соответственно. Ознакомьтесь с http://railscasts.com/episodes/23, чтобы узнать, как добавить счетчики кэшей в реальные активные записи (счетчики кэшей упрощают SQL и облегчают жизнь СУБД, а ваши запросы выполняются быстрее). После того, как вы настроите счетчики кэшей, вы можете, наконец, изменить вышеописанное, чтобы сделать:
User.find(:all, :include => [ :abuse_reports, :abused_games ], :order => 'users.abused_games_count DESC, users.abuse_reports_count DESC')
Это в конечном итоге извлечет ваши ActiveRecords в одну одну , простую инструкцию SQL.