Ruby on rails RubyonRailsActiveRecord:按1优化增量
我有一个条目ID,Ruby on rails RubyonRailsActiveRecord:按1优化增量,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个条目ID,受欢迎程度必须增加一个 一个简单的解决方案如下所示: Tag.find(id).increment!(:popularity) 但是它似乎不是很有效,因为我从数据库中选择了整个条目(*)(尽管我根本不需要它),然后执行第二个查询来更新它 有没有更有效的方法?我认为,一条更新语句(不带“select”)就足够了,但我该如何编写它呢?可能类似于: Tag.update_all("popularity = popularity + 1", {:id => id}) 或 ?
受欢迎程度
必须增加一个
一个简单的解决方案如下所示:
Tag.find(id).increment!(:popularity)
但是它似乎不是很有效,因为我从数据库中选择了整个条目(*)(尽管我根本不需要它),然后执行第二个查询来更新它
有没有更有效的方法?我认为,一条更新语句(不带“select”)就足够了,但我该如何编写它呢?可能类似于:
Tag.update_all("popularity = popularity + 1", {:id => id})
或
?
这不仅会跳过select,而且会自动递增。不管您如何操作,您都要运行一个查询来查找要更新的正确行,因此我认为用其他更新方法替换
标记.find()
,不会有多大好处。如果您使用的是Rails 3,我的理解是AREL将这些东西链接在一起,以执行尽可能少的查询。但是您应该能够通过一个SQL查询做到这一点:“更新标记设置流行度=流行度+1其中id
=X”-我是不是遗漏了什么?如果你想更改超过1,请参见
Tag.where(:id => id).update_all("popularity = popularity + 1")
Tag.increment_counter :popularity, id