Подтвердить что ты не робот

В Rails Console. как обновить поле для всех записей?

как я могу обновить таблицу Notification.email ко всем true в консоли?

В консоли я хотел бы просмотреть все записи в таблице и установить email = true.

Идеи?

4b9b3361

Ответ 1

Вы ищете update_all. См. документ.

Остерегайтесь, никакие обратные вызовы не запускаются таким образом.

Ответ 2

это должно работать

Notification.all.each do |n| n.update_attribute(:email, true); end

edit: сделано из каменщика:

Notification.all.each { |n| n.update_attribute(:email, true) }

Ответ 3

Вы можете использовать:

Notification.update_all(email: true)

Если у вас есть какие-либо условия для обновления, вы должны использовать:

Notification.find_each { |n| n.email = (n.id > 100) ? true : false }

Использовать Something.all - плохая идея для огромной таблицы db.

Ответ 4

Notification.update_all(email: true) 

- основной ответ.

Вам не нужно "прокручивать" само по себе, написав свой собственный блок: вы можете позволить активной записи выполнять тяжелую работу для вас - вот пример того, где у вас есть массив идентификаторов, и вы хотите обновить их письма (я в основном взял этот пример прямо из одного из моих контроллеров):

@notifications = Notification.where(id: [1,2,3,2,1,2]).update_all(email: true)

Изменить: люди смотрят вне для sql-инъекции, не включают params [: notification_ids] в свой метод "where" с необработанной строкой без экранирования или вы будете страдать атаками SQL-инъекций; или быть безопасным и использовать хэш.