【问题标题】:Adding, filling the table column within one migration Rails在一个迁移 Rails 中添加、填充表格列
【发布时间】:2023-03-14 04:55:01
【问题描述】:

我正在尝试完成这样的迁移:

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

如何在迁移中向表中添加列并立即更改它们?

【问题讨论】:

  • 该问题有 标签,但我在上面看不到任何 SQL。

标签: ruby-on-rails sqlite


【解决方案1】:

你可以试试#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

【讨论】:

  • 谢谢亲爱的朋友!它帮助了我!
猜你喜欢
  • 1970-01-01
  • 2010-10-06
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
相关资源
最近更新 更多