2017-02-23 42 views
0

Модель книги имееткак запустить миграционный файл с рубином сценарием

  1. имя столбец
  2. автор колонки
  3. колонка объявлений (я хочу добавить)

Я хотел бы добавить 'Mr' в столбец имен и добавьте их в столбец объявлений. Для этого я хотел написать скрипт с файлом миграции, но это не сработало. Что мне делать? Благодаря

class AddAdToBooks < ActiveRecord::Migration 
    def change 
    add_column :books, :ad, :string 

    Book.all.each do |book| 
     book.ad = 'Mr.' + name 
     book.save 
    end 
    end 
end 
+0

Какая ошибка вы получаете? Кроме того, измените 'Books' на' Book' –

+0

Он не мог двигаться, если бы я думал, что скрипт будет работать. И я попробовал изменить один, он тоже не работает. – johnny

ответ

2

Я это вы можете добиться того, что с помощью сырого запроса. Всегда лучше выполнять необработанный запрос, если вы не хотите запускать обратные вызовы модели.

class AddAdToBooks < ActiveRecord::Migration 
    def change 
    add_column :books, :ad, :string 

    if ActiveRecord::Base.connection.adapter_name.downcase.include? "mysql" 
     execute "UPDATE books SET ad = CONCAT('Mr. ', name)" 
    else 
     execute "UPDATE books SET ad = 'Mr. ' || name" 
    end 
    end 
end 

Проблема со следующим

Book.all.each do |book| 
  1. Она будет загружать все записи , даже если у вас есть 1 миллион записей в памяти и петлей над ним.
  2. Кроме того, он будет запускать все обратные вызовы для этой модели.
+0

Это работает. Большое вам спасибо! – johnny

Смежные вопросы