迁移中止了外键约束

时间:2019-08-02 23:59:14

标签: mysql ruby-on-rails ruby rails-migrations

我正在尝试使用一些已经存在的数据在MySql中创建一个数据库。它基于erghast db。我想引用另一个表,但是即使我之前以相同的方式引用了同一张表,也会收到一条错误消息

class CreateRaces < ActiveRecord::Migration[6.0]
  def change
    create_table :races do |t|
      t.integer           :year,        null: false
      t.integer           :round,       null: false
      t.references        :circuit,   foreign_key: {on_update: :cascade}
      t.string            :name,        null: false
      t.date              :date,        null: false
      t.time              :time,        null: true
      t.string            :url,         null: false
    end
  end
end

我的比赛表已创建。 然后我执行此操作,然后再执行大约3或4个其他操作.....

class CreatePitStops < ActiveRecord::Migration[6.0]
  def change
    create_table  :pit_stops do |t|
      t.references :race,       foreign_key: {on_update: :cascade}
      t.references :driver,     foreign_key: {on_update: :cascade}
      t.references :stop
      t.integer     :lap
      t.time        :time,         null: true
      t.string      :duration,     null: true
      t.integer     :milliseconds, null: true
    end
  end
end

但是,当我尝试这个

class CreateResults < ActiveRecord::Migration[6.0]
  def change
    create_table :results do |t|
      t.references :race, foreign_key: {on_update: :cascade}
      t.references :driver, foreign_key: {on_update: :cascade}
      t.references :constructor, foreign_key: {on_update: :cascade}
      t.integer     :number,          null: true
      t.integer     :grid,            null: false
      t.integer     :position,        null: true
      t.string      :positionText,    null: false
      t.integer     :positionOrder,   null: false
      t.integer     :points,          null: false
      t.integer     :laps,            null: false
      t.string      :time,            null: true
      t.integer     :milliseconds,    null: true
      t.integer     :fastestLap,      null: true
      t.integer     :rank,            null: true
      t.string      :fastestLapTime,  null: true
      t.string      :fastestLapSpeed, null: true
      t.references :status,        foreign_key: {on_update: :cascade}
    end
  end
end

控制台出现错误

Column `race_id` on table `results` does not match column `id` on `races`, which has type `bigint(20)`. To resolve this issue, change the type of the `race_id` column on `results` to be :bigint. (For example `t.bigint :race_id`).
Original message: Mysql2::Error: Cannot add foreign key constraint
/home/me/Documents/source/repos/Projects/F1_API/db/migrate/20190802234105_create_results.rb:3:in `change'

编辑;我已经尝试在其中添加类型::bigint。

我刚刚意识到,是因为表“ results”的名字吗? 因为另一个出现相同问题的表被命名为“ constructor_results”

Ruby 2.6.3p62 导轨6 RC2 MySQL 14.14发行版5.7.26

0 个答案:

没有答案