2011-09-05 90 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

相关问题