app/models/concerns/counter/recalculatable.rb in counterwise-0.1.3 vs app/models/concerns/counter/recalculatable.rb in counterwise-0.1.4
- old
+ new
@@ -7,10 +7,18 @@
elsif definition.manual?
raise Counter::Error.new("Can't recalculate a manual counter")
else
with_lock do
new_value = definition.sum? ? sum_by_sql : count_by_sql
- update! value: new_value
+
+ self.class.upsert(
+ attributes.without("id", "created_at", "updated_at").symbolize_keys.merge(value: new_value),
+ unique_by: [:parent_type, :parent_id, :name],
+ on_duplicate: Arel.sql("value = counter_values.value + EXCLUDED.value"),
+ record_timestamps: true
+ )
+
+ reload
end
end
end
def count_by_sql