2017-02-23 40 views
0

書模型已經如何運行與Ruby腳本遷移文件

  1. 名稱列
  2. 作者柱
  3. 廣告欄(我想補充)

我想補充'先生'到名稱列並將其添加到廣告列。爲此,我想寫一個帶有遷移文件的腳本,但它不起作用。 我該怎麼辦? 感謝

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

我這個可以實現,使用原始查詢。除非要運行Model回調,否則執行原始查詢總是更好。

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. 它會加載所有記錄即使你有100萬條記錄在內存中,並遍歷它。
  2. 此外,它將運行該模型的所有回調。
+0

它的工作原理。 非常感謝! – johnny