В Rails 5.0 у нас есть атрибут модели, сериализованный в строки YAML, которые принимают вложенные массивы:
class Foo
serialize :foos, Array
end
Если я посмотрю на пример myFoo.foos
в базе данных, он может выглядеть так:
---
- - Foo A
- - Foo B 1
- Foo B 2
- Foo B 3
или в рельсах это будет: [['Foo A'], ['Foo B 1', 'Foo B 2', 'Foo B 3']]
Мое желание - создать миграцию столбцов, переместив ее из сериализованного текста в тип массива Postgres.
Если бы это не было вложенными массивами, мы могли бы сделать что-то подобное в миграции:
change_column :foos, :foos, :string, array: true, default: [], using: "(string_to_array(foos, ','))"
Но это не работает для вложенных массивов; он создаст один массив с сериализованным фрагментом внутри, что-то вроде:
["---\n- - Foo 1\n- - Foo 2 A\n - Foo 2 B\n - Foo 2 C"]
Какие-нибудь идеи магии postgres, которые могут выполнять string_to_array
вложенным способом? Я пробовал unnest
, но это не позволяет вам вернуть набор в преобразование, поэтому я в растерянности.