【问题标题】:Ruby on Rails ignores UUID columns during db:createRuby on Rails 在 db:create 期间忽略 UUID 列
【发布时间】:2011-01-29 03:00:22
【问题描述】:

我正在尝试使用以下内容创建模型:

职位名称:字符串 companyid:uuid

但是,当我运行 db:create 时,它​​会创建带有“title”列的表,但会忽略“companyid”列。该应用程序当然会崩溃,因为 ActiveRecord 找不到 companyid 列。如果我手动添加 DB 列,应用程序可以工作(所以我知道 RoR 知道如何处理这种数据类型)..

我希望我的数据库配置和迁移脚本能够正确运行。我正在使用 PostgreSQL 9.0 和 postgres-pg 适配器。

我需要做什么特别的事情吗?谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby postgresql activerecord


    【解决方案1】:

    这应该会有所帮助:

    Ruby on Rails: UUID as your ActiveRecord primary key

    您的迁移不起作用,因为 UUID 不是受支持的类型。如果您查看链接,您将看到他们使用 UUID 作为列名和字符串作为类型。他们还禁用了 id 列并将其 UUID:string 列设置为主键。

    Postgres 适配器中还有 simplified type,这可能有助于您在手动创建列后了解其工作原理。虽然它只是将 UUID 映射到一个字符串。

    修复迁移以便他们可以处理 Postgres UUID 可能是一个不错的低效贡献,如果遇到此问题的人想为 Rails 做出贡献,但考虑到 Postgres UUID 似乎并没有真正做太多,您的应用程序将不得不生成 ID,它们也可能只是字符串。

    【讨论】:

    • Postgre 绝对不会将 uuid 存储为 VARCHAR2(或非 Oracle 数据库中的 VARCHAR)。它存储为 128 位二进制值 - 当然可以转换为 varchar/text。
    • 我的错。你当然是对的,所以我编辑了我的答案,晚餐时吃了一个不起眼的馅饼作为甜点。
    • googlers 的更多跟进:UUID 作为 Rails3 中的主键 gist.github.com/937739
    猜你喜欢
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 2013-02-13
    • 2011-07-29
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多