2017-10-06 3 views
1

テーブルに列を追加してすぐにその列にデータを追加する古い移行があります。私は、データベースを落とした後rake db:migrateを再実行する必要がある時はいつでも、私はこのエラーレールの移行に列を追加しましたが、列がすぐに存在しません

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

は、この移行は、それが最初に作成されたとき、私はこれを再実行した場合、なぜそれが動作しません働い取得今

def change 
    add_column :table_name, :column_name, :string 

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

、移行?

私はこれが素晴らしい方法ではないことを理解していますが、私の研究によれば、これはまだ機能するはずです。

+2

を使用してデータを挿入することができますが、HTTPSを試してみました:/ /stackoverflow.com/questions/9115347/model-reset-column-information-does-not-reload-columns-in-rails-migration? – fanta

+0

完璧な、それは働いた。おかげで@ファンタ – davidhu2000

答えて

0

マイグレーション内でデータを変更することはお勧めしません。それは通常それは反パターンです。 rakeタスク内のデータ移行を行うことをお勧めします。

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(...)

関連する問題