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

 龙欣23 发布于 2023-01-08 15:49

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

enable_extension'uuid-ossp'

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

1 个回答
  • 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

    2023-01-08 15:52 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有