1. 使用 Model.increment_counter(counter_name, id):
003:0> User.increment_counter(:hit_counter, 1)
User Update (0.8ms) UPDATE `users` SET `hit_counter` = COALESCE(`hit_counter`, 0) + 1 WHERE (`id` = 1)
2. 使用 Model.update_counters(id, attribute => ammount)
011:0> User.update_counters(1, :hit_counter => 50)
User Update (0.7ms) UPDATE `users` SET `hit_counter` = COALESCE(`hit_counter`, 0) + 50 WHERE (`id` = 1)
第1個方法可以單純的做+1動作,第2個方法多了指定要加多少。
另外,Rails 還有一個 instance method: increment,但我其實不建議使用它。因為他不是用 sql 的加法來達成 incrment.
013:0> user = User.first
014:0> user.increment(:hit_counter, 2)
015:0> user.save
User Update (0.2ms) UPDATE `users` SET `updated_at` = '2009-10-26 04:09:00', `hit_counter` = 163 WHERE `id` = 1
這種方式有可能出現 race condition.