Rails 5 - 如何添加UUID列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails 5 - 如何添加UUID列相关的知识,希望对你有一定的参考价值。

在Rails 5中似乎没有太多关于UUIDs的文档。我发现的是这段代码:

create_table :users, id: :uuid do |t|
  t.string :name
end

如果你正在创建一个表,那么这很有用,但是如果你要更新已经存在的表怎么办?

如何在表格中添加UUID列?

答案

要从默认ID迁移到使用uuid,请尝试像这样编写迁移:

class ChangeProjectsPrimaryKey < ActiveRecord::Migration
   def change
     add_column :projects, :uuid, :uuid, default: "uuid_generate_v4()", null: false

     change_table :projects do |t|
       t.remove :id
       t.rename :uuid, :id
     end

     execute "ALTER TABLE projects ADD PRIMARY KEY (id);"
   end
 end
另一答案

以下是将uuid列添加到现有Rails表的方法。

class AddUuidToContacts < ActiveRecord::Migration[5.1]
  def change
     enable_extension 'uuid-ossp' # => http://theworkaround.com/2015/06/12/using-uuids-in-rails.html#postgresql
     add_column :contacts, :uuid, :uuid, default: "uuid_generate_v4()", null: false
     execute "ALTER TABLE contacts ADD PRIMARY KEY (uuid);"
  end
end

如果您忘记添加enable_extension 'uuid-ossp',您将收到以下错误:

PG :: UndefinedFunction:错误:函数uuid_generate_v4()不存在ActiveRecord :: StatementInvalid:PG :: UndefinedFunction:ERROR:函数uuid_generate_v4()不存在

以上是关于Rails 5 - 如何添加UUID列的主要内容,如果未能解决你的问题,请参考以下文章

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

在 Rails 5 中添加引用列迁移

Rails 5:为啥即使我删除了迁移文件,rails 也会向 schema.rb 添加列

在 Postgresql 中使用 UUID 的 Rails 5.2 活动存储

如何在 Rails 迁移中添加检查约束?

Rails + UUID 生成的模式假定 UUID 是整数而不是字符串