foodsoft/db/migrate/20230215085312_migrate_message_body_to_action_text.rb

33 lines
1.2 KiB
Ruby
Raw Normal View History

class MigrateMessageBodyToActionText < ActiveRecord::Migration[7.0]
include ActionView::Helpers::TextHelper
class Message < ApplicationRecord
has_rich_text :body
end
def change
reversible do |dir|
dir.up do
rename_column :messages, :body, :body_old
Message.all.each do |message|
message.update(body: simple_format(message.body_old))
message.body.update(record_type: :Message) # action_text_rich_texts uses STI record_type field and has to be set to the real model
end
remove_column :messages, :body_old, :text
end
dir.down do
execute "ALTER TABLE `messages` ADD `body_old` text"
execute "UPDATE `messages` m
INNER JOIN `action_text_rich_texts` a
ON m.id = a.record_id
set m.body_old = a.body"
Message.all.each do |message|
message.update(body_old: strip_tags(message.body_old))
end
execute "DELETE FROM `action_text_rich_texts` WHERE `action_text_rich_texts`.`record_type` = 'Message'"
execute "ALTER TABLE `messages` CHANGE `body_old` `body` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL;"
end
end
end
end