我在rails中有一个名为Users
的现有表。它有一个名为gender
的列。我有另一个名为GenderOptions
的表。我想创建一个迁移,以便Users
表中的gender
列是引用GenderOptions
表的外键。
第一次尝试迁移文件看起来像这样:
class ForeignKey < ActiveRecord::Migration[7.1]
def change
add_reference :users, :gender, foreign_key: {to_table: :GenderOptions}
end
end
字符串
但我得到一个错误消息:
add_reference(:users, :gender, {:foreign_key=>{:to_table=>:GenderOptions}})
rake aborted!
StandardError: An error has occurred, all later migrations canceled: (StandardError)
Mysql2::Error: Duplicate column name 'gender_id'
...:in `change'
Caused by:
ActiveRecord::StatementInvalid: Mysql2::Error: Duplicate column name 'gender_id' (ActiveRecord::StatementInvalid)
...:in `change'
Caused by:
Mysql2::Error: Duplicate column name 'gender_id' (Mysql2::Error)
...:in `change'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
型
我也试过:
class ForeignKey < ActiveRecord::Migration[7.1]
def change
add_foreign_key :users, :GenderOptions, column: :gender_id, primary_key: :id
end
end
型
但我也犯了同样的错误。
在Rails中,如何更新现有表中的现有列,使其成为引用另一个表的外键?
1条答案
按热度按时间ogsagwnx1#
如果其他人也有同样的问题,我使用的解决方案是使用SQL而不是通过Rails迁移在Rails中进行更改:
1.确保属性的所有值都设置为
NULL
,并确保引用属性主键和属性外键的数据类型相同(BIGINT)1.运行
alter table users add constraint gender_forkey foreign key (gender) references genderoptions (id)
1.在Rails项目的命令行中运行
rake db:schema:dump