Chr*_* K. 6 ruby-on-rails rails-migrations ruby-on-rails-6
我使用以下命令创建了一个模型:
rails g model UserCertification user:references certification:references certification_no:string
Run Code Online (Sandbox Code Playgroud)
这是参考我的设计用户模型user:references。
在 db:migrate 我收到以下错误: 引起:
ActiveRecord::MismatchedForeignKey:
user_id表user_certifications上的列id与users类型为 的列不匹配bigint(20)。要解决此问题,请将user_id列的类型更改user_certifications为 :bigint。(例如t.bigint :user_id)。原消息:Mysql2::Error:无法添加外键约束
这是我的迁移
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
Run Code Online (Sandbox Code Playgroud)
我试图将类型设置为整数 t.references :user, null: false, foreign_key: true,type: :integer
我还删除了模型并重新编辑并检查了以前的参考资料,但没有成功。也许有人有想法?
Dav*_*mpy 10
尝试在引用中设置类型以匹配其他表:
t.references(:user, null: false, type: :bigint)
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,请尝试在 user_certifications 中明确创建外键:
t.bigint :user_id, null: false
t.references(:user)
Run Code Online (Sandbox Code Playgroud)
如果您在 Rails 6(也可能是其他版本)中看到此消息,则该错误消息可能具有误导性,并且与数据类型完全无关。
例如,在您的示例中,如果该表certifications不存在(例如,因为拼写错误),您仍然会收到错误消息,声称 user_id 应该是 bigint,即使用户引用完全正常。
系统地注释掉一些引用并运行 db:migrate 和 db:rollback,直到确定实际失败的引用。然后再仔细检查是否正确。
| 归档时间: |
|
| 查看次数: |
1571 次 |
| 最近记录: |