迁移:将整数更改为引用而不丢失行

时间:2018-11-17 15:48:12

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

我正在处理一个现有项目,我需要更改为现有字段的类型。该字段被声明为

add_column :users, :fo_creator, :integer

但是由于fo_creator字段是对users表的引用,因此我需要将其更改为:

add_reference :user, :fo_creator, index: true

在不丢失已保存数据的情况下该怎么办

1 个答案:

答案 0 :(得分:0)

references宏创建的列并没有什么神奇之处。

references :fo_creator创建:

  • bigint fo_creator_id
  • 外键

您的关联无效的原因很可能是belongs_to :fo_creator假定fkey列被命名为:fo_creator_id。虽然可以通过提供foreign_key选项来更改此设置,但我想说您是对列进行重命名以消除此不一致之处的正确方法。

您可以通过重命名列并添加外键来挽救现有列:

class ChangeUsersFoCreatorToReference < ActiveRecord::Migration[5.2]
  def change
    rename_column :users, :fo_creator, :fo_creator_id
    change_column :users, :fo_creator_id, :bigint # optional
    add_foreign_key :users, :fo_creators
  end
end

如果fo_creator_id是自引用(引用用户表),则需要这样创建fk:

# from table, to table
add_foreign_key :users, :users, column: :fo_creator_id

请参阅: