Rails 5 迁移数据类型问题

3

我最初使用PostgreSQL开发了我的Rails 5应用程序。由于托管方面的一些问题,我不得不在完成所有开发工作后转换到MariaDB。

我正在尝试添加一个更新,将我的购物车与管理员之间建立关联。这是我的迁移代码:

class AddAdminRefToCart < ActiveRecord::Migration[5.1]
  def change
    add_reference :carts, :admin, foreign_key: true
  end
end

当我运行时
rake db:migrate

我得到了这个错误:
== 20171129152942 AddAdminRefToCart: migrating ================================
-- add_reference(:carts, :admin, {:foreign_key=>true})
rake aborted!
StandardError: An error has occurred, all later migrations canceled:

Column `admin_id` on table `carts` has a type of `bigint(20)`.
This does not match column `id` on `admins`, which has type `int(11)`.
To resolve this issue, change the type of the `admin_id` column on `carts` to be :integer. (For example `t.integer admin_id`).

这个错误有道理,但我不确定正确的解决方法。可以有人请给予一些指导,告诉我应该如何编写我的迁移吗?提前感谢!

1个回答

4

您可以直接指定所需的确切数据类型,而不是使用add_reference

add_column :carts, :admin_id, :integer, limit: 4
add_foreign_key :carts, :admins
limit: 4参数告诉数据库创建一个4字节的字段,对应于INT类型,而不是limit: 8(现在默认),它对应于BIGINT类型。正如我在评论中提到的那样,这不会因为不使用add_reference而产生任何问题,因为add_reference只是对add_column以及可选的add_indexadd_foreign_key的“语法糖”。

这会对Rails造成任何问题吗?由于没有在关系中使用add_reference,预期的Rails功能是否会停止工作? - Cannon Moyer
不是的。add_reference 只是 add_column 的语法糖,而且还可以可选地添加 add_indexadd_foreign_key - jeffdill2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接