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.
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
归档时间: |
|
查看次数: |
1299 次 |
最近记录: |