如何使用 uuid 主键生成迁移

How to generate migration with uuid primary key

如何从 rails generate 命令生成模型,指定 uuid 作为主键的列类型?

我的目标是发出如下命令:

rails g model widget id{uuid}

生成类似

的迁移
create_table :widgets, id: :uuid do |t|
  t.timestamps null: false
end

我知道我可以在生成迁移后添加 id: :uuid,但我觉得一定有一些懒惰的方法可以做到这一点。

你可以这样做:

rails g model widget uuid:primary_key

我把这个link存到Pocket上了,很有用。

先运行吧

rails g migration CreateWidget uuid:primary_key

然后去迁移文件添加primary_key: "uuid", force: true

例如

class CreateWidget < ActiveRecord::Migration
  def change
    create_table :widgets, id: false, force: true do |t|
      t.primary_key :uuid
    end
  end
end

这是一个旧的 post 但我也想这样做。

首先 - 启用 uuid:创建一个新的迁移文件 rails g migration enable_uuid_extension 并按如下方式编辑此文件:

class EnableUuidExtension < ActiveRecord::Migration
  def change
    enable_extension 'uuid-ossp'
  end
end

Second - 在 /config/application.rb 中,添加这 3 行:

config.generators do |g|
  g.orm :active_record, primary_key_type: :uuid
end

然后 ...就是这样!如你所愿 rails g model widget 将生成 :

create_table :widgets, id: :uuid do |t|
  t.timestamps null: false
end

并将对您的所有下一次迁移执行相同的操作。

Source

As of Rails 5.0,您现在可以使用以下语法选择加入单个迁移:

rails generate migration CreateWidget widget --primary-key-type=uuid

这会导致以下迁移(使用 Rails 6.0 生成,但功能保持不变):

class CreateWidget < ActiveRecord::Migration[6.0]
  def change
    create_table :widgets, id: :uuid do |t|
    end
  end
end