class CategoryFeaturedUser < ActiveRecord::Base belongs_to :category belongs_to :user def self.max_featured_users 5 end def self.feature_users_in(category) # Figure out major posters in the category user_counts = exec_sql " SELECT p.user_id, COUNT(*) AS category_posts FROM posts AS p INNER JOIN topics AS ft ON ft.id = p.topic_id WHERE ft.category_id = :category_id GROUP BY p.user_id ORDER BY category_posts DESC LIMIT :max_featured_users ", category_id: category.id, max_featured_users: max_featured_users transaction do CategoryFeaturedUser.delete_all category_id: category.id user_counts.each do |uc| create(category_id: category.id, user_id: uc['user_id']) end end end end