diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2020-11-09 16:00:23 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-09 16:00:23 +0100 |
commit | 337dc6e0add164baa70bea690621fe23191d08a9 (patch) | |
tree | 85b70c3221780834ca7e3d46cc2e47fbd6fc1f71 /app | |
parent | 2b63c62c57b431074c7b91e195cabf94a0db7a10 (diff) |
Fix updating account counters when account_stat is not yet created (#15108)
Diffstat (limited to 'app')
-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 |