Первые 2 довольно просты.
получить общее количество объектов статистики для всех объектов текста / документа
Statistic.where(:loggable_type => "Text").where(:loggable_id => company.texts)
получить общее количество объектов статистики для всех объектов текста / документа в этом месяце
Statistic.where('created_at between ? and ?', 1.month.ago, Time.now).where(:loggable_type => "Text").where(:loggable_id => d.texts).count
получить первые пять текстов / документов компании с наибольшим количеством статистических объектов
ids = Statistic.select("COUNT(*) AS count_all").where(:loggable_type => "Text").where(:loggable_id => company.texts).group(:loggable_id).order("count_all desc").limit(5).size
Text.where(:id => ids)
получить первые пять текстов / документов компании с наибольшим количеством статистических объектов в этом месяце
ids = Statistic.select("COUNT(*) AS count_all").where('created_at between ? and ?', 1.month.ago, Time.now).where(:loggable_type => "Text").where(:loggable_id => d.texts).group(:loggable_id).order("count_all desc").limit(5).size
Text.where(:id => ids)