2
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2025-09-06 10:50:21 +08:00

Merge pull request #3878 from gdpelican/optimize-all-allowed-users

Optimize all_allowed_users query
This commit is contained in:
Régis Hanol 2015-11-02 17:06:36 +01:00
commit ff0c12efa2
2 changed files with 43 additions and 5 deletions

View file

@ -253,11 +253,8 @@ class Topic < ActiveRecord::Base
# all users (in groups or directly targetted) that are going to get the pm
def all_allowed_users
# TODO we should probably change this to 1 query
allowed_user_ids = allowed_users.select('users.id').to_a
allowed_group_user_ids = allowed_group_users.select('users.id').to_a
allowed_staff_ids = private_message? && has_flags? ? User.where(moderator: true).pluck(:id).to_a : []
User.where('id IN (?)', allowed_user_ids + allowed_group_user_ids + allowed_staff_ids)
moderators_sql = " UNION #{User.moderators.to_sql}" if private_message? && has_flags?
User.from("(#{allowed_users.to_sql} UNION #{allowed_group_users.to_sql}#{moderators_sql}) as users")
end
# Additional rate limits on topics: per day and private messages per day