背景:在Rails 5.1上,主键的默认值从Int更改为BigInt (PR > https://github.com/rails/rails/pull/26266)。
我正在开发一个新的Rails 5.1应用程序,它重用来自另一个Rails 4.0应用程序的一些模型。
当我运行specs时,我有一个脚本,基本上从其repo加载Rails 4.0应用程序的schema.rb文件,创建一个临时数据库,以便在运行测试时使用那些“外部”模型(来自其他DB)。
问题在于,由于其他应用程序在Rails 4.0上创建了schema.rb文件,所有Foreign Keys都是整数。
Rails 4.0 schema文件如下:
create_table "companies", force: :cascade do |t|
t.string "name"
end
create_table "users", force: :cascade do |t|
t.string "name",
t.integer "company_id", limit: 4, null: false
end
add_foreign_key "users", "companies"
因此,当我在新的
Rails 5.1
应用程序上运行测试时,它会加载其他应用程序模式(添加上述),但是在创建公司表时,它将主键设置为BigInt
而不是integer
。但是外键是一个integer
。这种不匹配会影响MySQL:
我知道我可以将该模式中的所有外键更改为BigInt。但是我想尝试避免这种解决方案,因为有相当多的外键和多个数据库。ActiveRecord :: MismatchedForeignKey:表
users
上的列company_id
类型为int(11)
。这与companies
上的列id
类型bigint(20)
不匹配。要解决此问题,请更改users
上的company_id
列的类型为:integer。(例如t.integer company_id
)。
有什么想法解决这个问题吗?或者有任何想法吗?