Могу ли я выполнить атомарное приращение в Rails 2.3 без перехода на SQL?

В нашем приложении есть часто используемый код, который увеличивает столбец, например:

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

Мы получаем таймауты ожидания блокировки, поэтому Я думаю о том, чтобы сделать эту операцию атомарной. Наивно, то, что я хочу сделать, выглядит так:

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

Есть ли способ сделать то же самое в рубиновом мире?

5
задан Simon 2 February 2011 в 09:38
поделиться