我正在努力实现这样的迁移:
class AddColumn1AndColumn2ToModel < ActiveRecord::Migration[5.2]
def change
change_table :models do |t|
t.string :column1, default: "FFFFFFFF"
t.integer :column2
end
Model.where(name: 'Name1').each{|model| model.update_columns(column1: '00000000', column2: 1)}
Model.where(name: 'Name2').each{|model| model.update_columns(column1: '00000000', column2: 1)}
Model.where(name: 'Name3').each{|model| model.update_columns(column1: 'FFFFFFFF', column2: model.mod_index.to_i(16))}
end
end
但我得到这样一个错误:
== 20210503012429 AddColumn1AndColumn2ToModel: migrating ========
-- change_table(:models)
-> 0.0038s
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:
can't write unknown attribute `column1`
我尝试将Change_table更改为add_column,但错误是相同的。
add_column :models, :column1, :string, default: 'FFFFFFFF'
add_column :models, :column2, :integer
如何在迁移中将列添加到表中并立即更改它们?
您可以试试#reset_column_information
。可能是旧的模式信息还在缓存中。
class AddColumn1AndColumn2ToModel < ActiveRecord::Migration[5.2]
def change
change_table :models do |t|
t.string :column1, default: "FFFFFFFF"
t.integer :column2
end
Model.reset_column_information
Model.where(name: 'Name1').each{|model| model.update_columns(column1: '00000000', column2: 1)}
Model.where(name: 'Name2').each{|model| model.update_columns(column1: '00000000', column2: 1)}
Model.where(name: 'Name3').each{|model| model.update_columns(column1: 'FFFFFFFF', column2: model.mod_index.to_i(16))}
end
end