我有一个旧的迁移,它将一个列添加到表中,然后立即在该列中添加一些数据。
def change
add_column :table_name, :column_name, :string
TableName.create(
column_name: "some string"
)
end
现在,每当我在删除数据库后重新运行rake db:migrate
时,我都会收到此错误
NoMethodError:未定义的方法`column_name ='对于#<表名:0x007fa483a18838>
此迁移在最初创建时有效,如果我重新运行此迁移,为什么它不起作用?
我知道这不是一个很好的做法,但我的研究表明这仍然有用。
答案 0 :(得分:0)
我不建议在迁移中进行数据更改。它通常反模式。建议在rake任务中进行数据迁移:
namespace :table_names do
task :create_first_table_name do
TableName.create(
column_name: "some string"
)
end
end
如果您想了解有关数据迁移的更多信息,请阅读Data Migrations in Rails
答案 1 :(得分:0)
https://stackoverflow.com/a/46613312/1949363是一个可靠的回复,通常是一个很好的模式。
或者,如果数据必须在那里进行迁移以使应用程序保持有效状态,您可以在迁移中编写原始SQL并使用
插入数据 ActiveRecord::Base.connection.execute(...)