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.

創作者介紹
創作者 沒力小僧 的頭像
沒力小僧

Manic's Talk

沒力小僧 發表在 痞客邦 留言(0) 人氣()