当foreign_key是字符串时,用于遗留数据的rails关联

问题描述 投票:1回答:1

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

:client_id => "30430"   

但是在postgres(我们更喜欢使用)中,由于数据类型不匹配,关联查询会产生阻塞。有没有解决的办法?

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.

明确一点,我正在寻找不涉及改变基础数据的解决方案(虽然这将是我的首选)

ruby-on-rails associations legacy
1个回答
0
投票

起初我以为你可以编写一个迁移来将列类型转换为整数,它适用于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)'

正如链接所述,任何具有非数字值的字符串显然会产生奇怪的结果,如果不是抛出错误。而且显然值得首先在当地尝试。

© www.soinside.com 2019 - 2024. All rights reserved.