связывает рельсы для устаревших данных, когда foreign_key является строкой - PullRequest
0 голосов
/ 05 января 2019

У меня неудачная задача заставить некоторые устаревшие данные работать с рельсами 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.

Если говорить прямо, я ищу решения, которые не включают изменение базовых данных (хотя это был бы мой первый выбор)

1 Ответ

0 голосов
/ 05 января 2019

Сначала я подумал, что вы можете просто написать миграцию для преобразования типа столбца в целое число, которое работает с mysql, но, очевидно, не с postgres:

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

Предполагая, что ваша таблица называется продуктами, должно работать следующее:

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

Как указывает ссылка, любые строки с нечисловым значением, очевидно, будут давать странные результаты, если не выдают ошибку. И, очевидно, стоит сначала попробовать на месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...