如何使用Rails为所有迁移文件设置默认的'uuid-ossp'扩展名?

Kan*_*nna 1 ruby ruby-on-rails rails-postgresql ruby-on-rails-3.2 ruby-on-rails-4

如何为所有迁移文件设置默认的'uuid-ossp'扩展名?

enable_extension'uuid-ossp'

我正在使用Ruby 2.1和Rails 4以及PostgreSQL.

Gag*_*ami 5

Rails 4对Postgres中的UUID(通用唯一标识符)类型具有本机支持.在这里,我将描述如何使用它来生成,UUIDs而无需在Rails代码中手动执行.

首先,您需要启用Postgres扩展程序‘uuid-ossp’:

class CreateUuidPsqlExtension < ActiveRecord::Migration
  def self.up
    enable_extension "uuid-ossp"
  end

  def self.down
    disable_extension "uuid-ossp"
  end
end
Run Code Online (Sandbox Code Playgroud)

您可以使用a UUID作为ID替代:

create_table :translations, id: :uuid do |t|
  t.string :title
  t.timestamps
end
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Translations表将具有UUID作为ID并且它是自动生成的.Postgresq中的uuid-ossp扩展具有不同的算法,如何生成UUID.Rails 4默认使用v4.您可以在此处阅读有关这些算法的更多信息:http://www.postgresql.org/docs/current/static/uuid-ossp.html

但是,有时您不希望将UUID作为ID替换,而是将其放在单独的列中:

class AddUuidToModelsThatNeedIt < ActiveRecord::Migration
  def up
    add_column :translations, :uuid, :uuid
  end

  def down
    remove_column :translations, :uuid
  end
end
Run Code Online (Sandbox Code Playgroud)

这将创建一个UUID列,但不会自动生成UUID.你必须在使用SecureRandom的Rails中自己完成.但是,我们认为这是典型的数据库责任.幸运的是,默认选项add_column有助于:

class AddUuidToModelsThatNeedIt < ActiveRecord::Migration
  def up
    add_column :translations, :uuid, :uuid, :default => "uuid_generate_v4()"
  end

  def down
    remove_column :translations, :uuid
  end
end
Run Code Online (Sandbox Code Playgroud)

现在UUID将创建automatically,也用于现有记录!

我希望这有助于你理解..如果这篇文章让你满意,了解UUID,那么请点赞这个答案...;)通过Helmut