为什么 Rails 迁移失败?

Kir*_*nik 4 postgresql uuid ruby-on-rails database-migration

我使用 uuid 而不是 bigint 作为主键。和下一次迁移

class CreateProjects < ActiveRecord::Migration[6.0]
  def change
    create_table :projects, id: :uuid do |t|
      t.string :title
      t.references :user, null: false, foreign_key: true
      t.timestamps
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

失败并出现错误:

PG::DatatypeMismatch: ERROR:  foreign key constraint "fk_rails_b872a6760a" cannot be implemented
DETAIL:  Key columns "user_id" and "id" are of incompatible types: bigint and uuid.
Run Code Online (Sandbox Code Playgroud)

Sii*_*ser 10

t.references默认情况下假设另一个表有一个bigint主键,并使外键字段也是一个bigint. 一旦添加了外键,就会发现这种差异并且迁移失败。

使用type: :uuid指定字段是否应该确实是uuid

t.references :user, null: false, foreign_key: true, type: :uuid
Run Code Online (Sandbox Code Playgroud)

我自己在我的项目中通过记住每个引用/属于需要有 4 个选项来跟踪它。nullforeign_keytypeindex。这迫使我考虑 4 个选项中的每一个,即使我选择将它们的值保留为默认值。