diff options
author | Thibaut Girka <thib@sitedethib.com> | 2020-11-12 22:13:57 +0100 |
---|---|---|
committer | Thibaut Girka <thib@sitedethib.com> | 2020-11-12 22:13:57 +0100 |
commit | c077cdaba70eac154909cad412ece409acc2e688 (patch) | |
tree | 7d13d319ce62475de15014406635f32a8742ca4b /app/models/account_stat.rb | |
parent | 67125534bc0fd48a45d6cb17a5c78712d8e87150 (diff) | |
parent | 9870b175b477bbc984fc7945f1ebe07e3f2b0053 (diff) |
Merge branch 'master' into glitch-soc/merge-upstream
Conflicts: - `app/controllers/relationships_controller.rb`: Upstream changed a line too close to a glitch-soc only line related to glitch-soc's theming system. Applied upstream changes accordingly.
Diffstat (limited to 'app/models/account_stat.rb')
-rw-r--r-- | app/models/account_stat.rb | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/app/models/account_stat.rb b/app/models/account_stat.rb index c84e4217c..e70b54d79 100644 --- a/app/models/account_stat.rb +++ b/app/models/account_stat.rb @@ -21,26 +21,26 @@ class AccountStat < ApplicationRecord def increment_count!(key) update(attributes_for_increment(key)) - rescue ActiveRecord::StaleObjectError + rescue ActiveRecord::StaleObjectError, ActiveRecord::RecordNotUnique begin reload_with_id rescue ActiveRecord::RecordNotFound - # Nothing to do - else - retry + return end + + retry end def decrement_count!(key) - update(key => [public_send(key) - 1, 0].max) - rescue ActiveRecord::StaleObjectError + update(attributes_for_decrement(key)) + rescue ActiveRecord::StaleObjectError, ActiveRecord::RecordNotUnique begin reload_with_id rescue ActiveRecord::RecordNotFound - # Nothing to do - else - retry + return end + + retry end private @@ -51,8 +51,13 @@ class AccountStat < ApplicationRecord attrs end + def attributes_for_decrement(key) + attrs = { key => [public_send(key) - 1, 0].max } + attrs + end + def reload_with_id - self.id = find_by!(account: account).id if new_record? + self.id = self.class.find_by!(account: account).id if new_record? reload end end |