Ruby on Rails ActiveRecord:将增量优化为1

krn*_*krn 14 activerecord ruby-on-rails

我有一个条目ID,popularity必须增加一个.

一个简单的解决方案如下所示:

Tag.find(id).increment!(:popularity)
Run Code Online (Sandbox Code Playgroud)

但是它似乎效率不高,因为我从数据库中选择了整个条目(*)(即使我根本不需要它),然后执行第二个查询来更新它.

有没有更有效的方法来做到这一点?我认为,一个更新语句(没有"select")应该足够了,但是我该怎么写呢?

idl*_*ers 26

Tag.increment_counter :popularity, id
Run Code Online (Sandbox Code Playgroud)

这不仅会跳过选择,而是以原子方式递增.

  • 如果您想要更改1以上,请参阅http://apidock.com/rails/ActiveRecord/CounterCache/update_counters (2认同)