Ruby on rails 类似于RubyonRails的递增计数器,但用于DateTime.now?

Ruby on rails 类似于RubyonRails的递增计数器,但用于DateTime.now?,ruby-on-rails,race-condition,Ruby On Rails,Race Condition,我正在寻找一种ActiveRecord方法,该方法将根据数据库在更新时的“现在”概念,将指定的日期时间字段设置为“现在”: SQL: update object_type set time_stamp=NOW() where id = 37 而不是 Ruby: get DateTime.now SQL: update object_type set time_stamp=% where id = 37 对于简单计数器(ActiveRecord::CounterCache.increment\

我正在寻找一种ActiveRecord方法,该方法将根据数据库在更新时的“现在”概念,将指定的日期时间字段设置为“现在”:

SQL: update object_type set time_stamp=NOW() where id = 37
而不是

Ruby: get DateTime.now
SQL: update object_type set time_stamp=% where id = 37

对于简单计数器(
ActiveRecord::CounterCache.increment\u counter

object\u type.time\u stamp=time.now有什么问题;object\u type.save?设置和保存有两个问题。两者都与并发更新有关。一个问题是,这两个储存器可能存在时钟偏移,因此实际记录的时间戳认为它来自更早的时间。另一个问题是延迟:如果两个存储程序的请求被数据库按顺序调度,则可能再次发生错误的更新。DBs提供事务来防止这种情况,但它们(a)昂贵,(b)无法从Rails获得。请注意,用户#touch(:field)本质上是“object.field=Time.now;object.save!”代码,我刚才列出的问题也是如此。但无论如何,它都比这些代码片段更简洁:-\n在数据库中使用自动更新的时间戳列。数据库事务完全可以从Rails获得。