5
6
7
8
9
10
11
12
13
14
15
16
|
# File 'lib/update_counters_with_condition.rb', line 5
def update_counters_with_condition(id, counters)
if id.is_a?(Hash)
updates = counters.inject([]) { |list, (counter_name, increment)|
sign = increment < 0 ? "-" : "+"
list << "#{connection.quote_column_name(counter_name)} = COALESCE(#{connection.quote_column_name(counter_name)}, 0) #{sign} #{increment.abs}"
}.join(", ")
condition = id.map{|column_name, value| "#{connection.quote_column_name(column_name)} = #{quote_value(value)}"}.join(" AND ")
update_all(updates, condition)
else
update_counters(id, counters)
end
end
|