我可以在Rails 2.3中进行primefaces增量而不降低到SQL吗?

我们的应用程序中有一些经常命中的代码会增加一列,如下所示:

if (r = customer.find_or_generate_reminder) r.counter += 1 r.save! end 

我们正在获得锁定等待超时,因此我正在考虑将其作为primefaces操作。 天真,我想做的事情看起来像这样:

 if (r = customer.find_or_generate_reminder) connection.excute('UPDATE customer_reminders SET counter=counter+1, updated_at=now() WHERE id = ' + r.id) end 

是否有一种ruby世界的方式做同样的事情?

您可以使用类方法increment_counter

 Customer.increment_counter :counter, customer 

这将创造类似于:

 UPDATE `customers` SET `counter` = COALESCE(`counter`, 0) + 1 WHERE (`customers`.`id` = 53) 

(您必须将类或类的实例传递给此方法( customer ),而不是customer.increment!(:counter)方法,它不是primefaces的)

我创建了一个gem,使其更加面向对象:

https://github.com/imme5150/rails_atomic_increment

允许您这样做:

 customer.atomic_increment!( :counter ) 

让我知道你的想法。

如果你不介意一点SQL:

 CustomerReminder.where(id: id).update_all('counter = counter + 1, updated_at = now()')