【发布时间】:2020-02-10 19:57:14
【问题描述】:
我使用以下命令创建了一个模型:
rails g model UserCertification user:references certification:references certification_no:string
引用我的设计用户模型user:references。
在 db:migrate 我收到以下错误: 原因:
ActiveRecord::MismatchedForeignKey: 列
user_id在表上user_certifications与users上的列id不匹配,该列具有 输入bigint(20)。要解决此问题,请更改user_id上的user_certifications列是 :bigint。 (例如t.bigint :user_id)。原始消息:Mysql2::Error: Cannot add 外键约束
这是我的迁移
class CreateUserCertifications < ActiveRecord::Migration[6.0]
def change
create_table :user_certifications do |t|
t.references :user, null: false, foreign_key: true
t.references :certification, null: false, foreign_key: true
t.string :certification_no
t.timestamps
end
end
end
我尝试使用t.references :user, null: false, foreign_key: true,type: :integer将类型设置为整数
我还删除了模型并重新制作并检查了以前的参考资料,但没有成功。 也许有人有想法?
【问题讨论】:
-
您是否已经创建了用户表?
-
奇怪。
type: :integer将类型设置为整数,但不是bigint。您可以尝试使用t.bigint :user_id, null: false添加列,然后手动创建使用add_foreign_key :user_certifications, :users添加fkey 约束 -
根据6.0 docs默认为
:bigint。这让这更加令人费解。
标签: ruby-on-rails rails-migrations ruby-on-rails-6