2011-09-05 31 views
0

我的模型上有幾個計數器,我想增加/減少這些計數器,它們應該在事務中完成。如何在單個事務中更新計數器或多個計數器?

因此,例如,User型號具有sales_count,friend_count

現在我想在一個事務中來修改他們兩個:

user.sales_count += 1 
user.friend_count += 3 
user.save 

我怎樣才能在交易中做到這一點?

我知道有increment_counter,但是這似乎是隻有一個屬性,我無法弄清楚如何添加2或減去2,而不是僅僅1

回答

2

你可以使用update_counters

User.update_counters(user_id, :sales_count => 1, :friend_count => 3, :other_count => -2) 
+0

如果我想要將2個列值一起添加,那麼該怎麼辦? (不是在內存中的模型,但在數據庫級別,如:counter3 =>:counter1 +:counter2(這不'工作,但我希望它!) – Blankman

+0

我不認爲有一種方法可以做你想做的。你可以看一下'update_counters'方法的源代碼,看看它是如何完成的(基本上只是動態生成SQL):http://apidock.com/rails/ActiveRecord/CounterCache/update_counters – PeterWong

+0

未來不要忘記在相關模型中將緩存添加到true – BKSpurgeon

相關問題