33 lines
1.2 KiB
Ruby
33 lines
1.2 KiB
Ruby
|
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
|