2011-08-30 17 views
1

我该如何改进以下更新的性能?如何在少于N个查询中更新N个帖子的“my_field”?

Post.find(id1).update_attributes(:my_field => value1) 
Post.find(id2).update_attributes(:my_field => value2) 
Post.find(id3).update_attributes(:my_field => value3) 
     ...        ... 
Post.find(idN).update_attributes(:my_field => valueN) 
+0

没有办法找到并更新记录,因为您仍然需要在数据库上执行SELECT和UPDATE语句。也许你可以把id [x]放在一个循环中,这样你就不会重复很多代码了? – creativetechnologist

+0

那么,我不知道是否有一些复杂的SQL查询来加速这个... –

回答

1

您可以使用update_all

Post.update_all("field = 'value'", "id IN (id1, id2...)") 

编辑一个SQL查询做到这一点:这会不会用一个语句的工作,当然你将具有N Post.update_all刑期,因为每个N帖子post会有不同的值,但是由于它使得SQL UPDATE和doens不会实例化Post对象,因此目前比Post.find.update_attributes更快。

+0

什么会使每个ID的'价值'增加? –

+1

只有当你有一个值时才有效... – lucapette

+0

没错,对不起,我的错误。 – cicloon

相关问题