用途:在 Rails 应用中正确实现 UUID 主键,支持 PostgreSQL 原生 uuid 列类型,或 SQLite 下以 blob(16) 二进制存储并用 base36 编码为 25 字符的 URL 友好字符串。
主要能力:对比自增、UUIDv4 与 UUIDv7,推荐 UUIDv7(时间有序、可排序、索引性能更好,Ruby 3.3+ 自带 SecureRandom.uuid_v7);给出 PostgreSQL 与 SQLite 两套完整配置步骤,包括生成器默认值、迁移写法、fixture 写法、关联使用与常见错误清单。
必要用法:PostgreSQL 需在 config/initializers/generators.rb 中设置 g.orm :active_record, primary_key_type: :uuid;PostgreSQL 13 以下需 enable_extension "pgcrypto";迁移使用 create_table :posts, id: :uuid,外键使用 t.references :post, type: :uuid, foreign_key: true。SQLite 需注册自定义 uuid 类型、扩展适配器与 schema dumper,并在 ApplicationRecord 中回退生成主键。
适用场景:ID 出现在 URL、API 或多数据库同步时使用 UUID;仅内部使用、不对外暴露的表可用整数。
限制:UUIDv7 需 Ruby 3.3+,PostgreSQL 原生 v7 支持暂未提供;SQLite 方案需自定义类型与适配器扩展;从整数主键迁移需数据迁移策略,不宜原地修改主键;避免混用整数与 UUID 主键。