代码之家  ›  专栏  ›  技术社区  ›  pixelearth

外键为string时遗留数据的rails关联

  •  1
  • pixelearth  · 技术社区  · 6 年前

    我有一个不幸的任务,让一些遗留数据与rails ap一起工作。一些id字段是字符串

    :client_id => "30430"   
    

    PG::UndefinedFunction: ERROR:  operator does not exist: bigint = character varying LINE 1: ...ients" INNER JOIN "reservation" ON "clients"."id" = "reserva...   
    No operator matches the given name and argument type(s). You might need to add explicit type casts.
    

    明确地说,我正在寻找不涉及改变基础数据的解决方案(尽管这是我的首选)

    1 回复  |  直到 6 年前
        1
  •  0
  •   Mark    6 年前

    一开始我以为你可以编写一个迁移来将列类型转换为整数,它可以用于mysql,但显然不能用于postgres:

    https://makandracards.com/makandra/18691-postgresql-vs-rails-migration-how-to-change-columns-from-string-to-integer

    假设您的表被称为products,那么以下内容应该可以工作:

    change_column :products, :client_id, 'integer USING CAST(column_name AS integer)'
    

    正如链接所述,任何带有非数字值的字符串如果不抛出错误,显然会给出奇怪的结果。显然值得先在当地试一试。