diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2017-10-13 16:44:29 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-13 16:44:29 +0200 |
commit | b8db386e056fe236ed3f41e563a824e30733c4ce (patch) | |
tree | 1753b0b08768582120309e788c30590b51e998d9 /app/models | |
parent | 48f7a587999740709f234e1ee004994de0059ab3 (diff) |
Fix UserTrackingConcern firing on every request, optimize some queries (#5368)
- For some reason, :if option on before_action did not work. It got executed every time, returned false, and the action run anyway, which led to the current_sign_in_at and sign_in_count being updated on every request - Return "do not filter" early in FeedManager#filter_from_home? if the status is authored by receiver. Usually this method is not called for own statuses at all, but it is called when Feed#get uses the database - Return early if #reload_stale_associations! has nothing to load to save a database query with WHERE 1=0
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/notification.rb | 5 | ||||
-rw-r--r-- | app/models/status.rb | 6 |
2 files changed, 9 insertions, 2 deletions
diff --git a/app/models/notification.rb b/app/models/notification.rb index 1e64d1ae9..0a5d987cf 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -68,7 +68,10 @@ class Notification < ApplicationRecord class << self def reload_stale_associations!(cached_items) account_ids = cached_items.map(&:from_account_id).uniq - accounts = Account.where(id: account_ids).map { |a| [a.id, a] }.to_h + + return if account_ids.empty? + + accounts = Account.where(id: account_ids).map { |a| [a.id, a] }.to_h cached_items.each do |item| item.from_account = accounts[item.from_account_id] diff --git a/app/models/status.rb b/app/models/status.rb index 6db1f2a4c..624e33395 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -194,7 +194,11 @@ class Status < ApplicationRecord account_ids << item.reblog.account_id if item.reblog? end - accounts = Account.where(id: account_ids.uniq).map { |a| [a.id, a] }.to_h + account_ids.uniq! + + return if account_ids.empty? + + accounts = Account.where(id: account_ids).map { |a| [a.id, a] }.to_h cached_items.each do |item| item.account = accounts[item.account_id] |