在rails迁移中添加列,但列不会立即存在

时间:2017-10-06 16:34:22

标签: ruby-on-rails ruby ruby-on-rails-4 migration

我有一个旧的迁移,它将一个列添加到表中,然后立即在该列中添加一些数据。

def change
  add_column :table_name, :column_name, :string

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

现在,每当我在删除数据库后重新运行rake db:migrate时,我都会收到此错误

  

NoMethodError:未定义的方法`column_name ='对于#<表名:0x007fa483a18838>

此迁移在最初创建时有效,如果我重新运行此迁移,为什么它不起作用?

我知道这不是一个很好的做法,但我的研究表明这仍然有用。

2 个答案:

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