У меня есть миграция данных rails (postgres db), где я должен использовать чистый sql для преобразования данных из-за некоторых ограничений модели. Данные хранятся как json в виде строки, но мне нужно, чтобы она была пригодной для использования ha sh для других целей.
Моя миграция работает так, чтобы преобразовать его в ha sh. Однако мой метод down просто удаляет данные или оставляет их как пустые {}. Кстати, чтобы устранить путаницу, мое имя столбца на самом деле сохраняется как data
в таблице Games
На основе моего метода вверх, как мне правильно отменить миграцию, используя только sql?
class ConvertGamesDataToJson < ActiveRecord::Migration[6.0]
def up
statement = <<~SQL
update games set data = regexp_replace(trim(both '"' from data::text), '\\\\"', '"', 'g')::jsonb;
SQL
ActiveRecord::Base.connection.execute(statement)
# this part works!
end
def down
statement = <<~SQL
update games set data = to_json(data::text)::jsonb;
SQL
ActiveRecord::Base.connection.execute(statement)
end
end
Вот как он выглядит после правильного преобразования
data: {
"id"=>"d092a-f2323",
"recent"=>'yes',
"note"=>"some text",
"order"=>1
}
как это было до миграции и на что нужно откатиться:
data:
"{
\"id\":\"d092a-f2323\",
\"recent\":\"yes\",
\"note\":\"some text\",
\"order\":1,
}"