mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-12-28 19:24:10 +08:00
42 lines
1.2 KiB
Ruby
42 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require File.expand_path('app/helpers/database_helper')
|
|
|
|
class AddStepTextAndMigrateData < ActiveRecord::Migration[6.1]
|
|
include DatabaseHelper
|
|
|
|
def up
|
|
create_table :step_texts do |t|
|
|
t.references :step, null: false, index: true, foreign_key: true
|
|
t.string :text
|
|
|
|
t.timestamps
|
|
end
|
|
|
|
add_gin_index_without_tags :step_texts, :text
|
|
|
|
Step.where.not(description: nil).find_in_batches(batch_size: 100) do |steps|
|
|
step_texts = []
|
|
|
|
steps.each do |step|
|
|
step_texts << step.step_texts.new(text: step.description)
|
|
end
|
|
StepText.import(step_texts, validate: false)
|
|
end
|
|
|
|
Step.joins(:tiny_mce_assets, :step_texts)
|
|
.preload(:tiny_mce_assets, :step_texts).find_each do |step|
|
|
step_text_id = step.step_texts.take.id
|
|
step.tiny_mce_assets.update_all(object_type: 'StepText', object_id: step_text_id)
|
|
end
|
|
end
|
|
|
|
def down
|
|
StepText.joins(:tiny_mce_assets)
|
|
.preload(:step, :tiny_mce_assets).find_each do |step_text|
|
|
step_text.tiny_mce_assets.update_all(object_type: 'Step', object_id: step_text.step.id)
|
|
end
|
|
|
|
drop_table :step_texts
|
|
end
|
|
end
|