如何为所有迁移文件设置默认的'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
您可以使用a UUID
作为ID
替代:
create_table :translations, id: :uuid do |t| t.string :title t.timestamps end
在这种情况下,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
这将创建一个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
现在UUID
将创建automatically
,也用于现有记录!
我希望这有助于你理解..如果这篇文章让你满意,了解UUID,那么请点赞这个答案...;)通过Helmut