Лучшая практика для обновления одного атрибута на нескольких записях - PullRequest
6 голосов
/ 19 февраля 2011

Я пишу экспортер в моем текущем проекте Rails3 прямо сейчас.Этот экспортер должен пометить каждую экспортированную запись как «экспортируемую» (bool).Я знаю, как легко сделать это в цикле, но, честно говоря, не очень приятно позволить Rails запрашивать базу данных, скажем, 300 раз подряд, просто установить одно поле на 300 записей.

Кто-нибудь знает, есть ли хороший способ оптимизировать это?Должен ли я играть вручную с подготовленными утверждениями, или Rails3 позаботится об этом автоматически?Есть ли другая команда SQL, чтобы сделать это за один шаг или что-то в этом роде?

Спасибо за вашу помощь

  • Arne

Ответы [ 2 ]

15 голосов
/ 19 февраля 2011

Используйте метод update_all в классе.От Rails API :

# Update all books with 'Rails' in their title
Book.update_all "author = 'David'", "title LIKE '%Rails%'"
8 голосов
/ 07 августа 2015

Поскольку ActiveRecord 4.0 этот способ устарел ( Rails API ), текущий способ сделать то же самое:

# Update all books with 'Rails' in their title
Book.where('title LIKE ?', '%Rails%').update_all(author: 'David')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...