我正在处理一个现有项目,我需要更改为现有字段的类型。该字段被声明为
add_column :users, :fo_creator, :integer
但是由于fo_creator字段是对users表的引用,因此我需要将其更改为:
add_reference :user, :fo_creator, index: true
在不丢失已保存数据的情况下该怎么办
答案 0 :(得分:0)
由references
宏创建的列并没有什么神奇之处。
references :fo_creator
创建:
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
请参阅: