如何使用uuid主键生成迁移

时间:2015-08-25 16:02:55

标签: ruby-on-rails uuid

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

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

rails g model widget id{uuid}

生成类似

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

我意识到我可以在生成迁移后添加id: :uuid,但我觉得必须有一些懒惰的方法来执行此操作。

4 个答案:

答案 0 :(得分:3)

这是一个老帖子,但我也想这样做。

首先 - 启用uuid:创建新的迁移文件rails g migration enable_uuid_extension并编辑此文件,如下所示:

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

第二次 - 在/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

答案 1 :(得分:0)

你可以这样做:

rails g model widget uuid:primary_key

我将此link保存在Pocket上,非常有用。

答案 2 :(得分:0)

首先运行它

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

答案 3 :(得分:0)

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