Как обновить "my_field" из N постов менее чем за N запросов? - PullRequest
1 голос
/ 30 августа 2011

Как я могу улучшить производительность следующих обновлений?

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)

1 Ответ

1 голос
/ 30 августа 2011

Вы можете сделать это с помощью одного запроса SQL, используя update_all

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

РЕДАКТИРОВАТЬ: Это не будет работать с одним утверждением, конечно, у вас будет N Post.update_allпредложения для N постов, поскольку каждый пост будет иметь разное значение, но поскольку он делает SQL UPDATE и не создает экземпляров объектов Post, он работает быстрее, чем Post.find.update_attributes.

...