2017-10-06 82 views
1

我有一箇舊遷移,它將一列添加到表中,然後立即在該列中添加一些數據。在rails遷移中添加列但列不存在

def change 
    add_column :table_name, :column_name, :string 

    TableName.create(
    column_name: "some string" 
) 
end 

現在,每當我有刪除數據庫後重新運行rake db:migrate,我得到這個錯誤

NoMethodError: undefined method `column_name=' for #< TableName:0x007fa483a18838>

這種遷移工作時,它最初創建的,所以如果我重新運行這不它的工作移民?

我知道這不是一個很好的做法,但我的研究表明,這應該仍然有效。

+2

你試圖插入數據的https:/ /stackoverflow.com/questions/9115347/model-reset-column-information-does-not-reload-columns-in-rails-migration? – fanta

+0

完美,工作。謝謝@fanta – davidhu2000

回答

0

我不會推薦在遷移中進行數據更改。它通常是反模式。建議做一個耙子任務中的數據遷移:

namespace :table_names do 
    task :create_first_table_name do 
    TableName.create(
     column_name: "some string" 
    ) 
    end 
end 

閱讀Data Migrations in Rails,如果你想知道更多關於數據遷移

0

https://stackoverflow.com/a/46613312/1949363是一個堅實的響應,通常一個偉大的模式可循。

另外,如果數據必須在那裏進行遷移,以保持應用程序處於有效狀態,您可以編寫原始SQL的遷移和使用

ActiveRecord::Base.connection.execute(...)