2013-02-06 03:16:51 +08:00
|
|
|
class CategoryFeaturedUser < ActiveRecord::Base
|
|
|
|
belongs_to :category
|
|
|
|
belongs_to :user
|
|
|
|
|
|
|
|
def self.max_featured_users
|
2013-02-07 23:45:24 +08:00
|
|
|
5
|
2013-02-06 03:16:51 +08:00
|
|
|
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
|