From e424036d20c3c8391d6c1a1b75ad09ad6f7e3233 Mon Sep 17 00:00:00 2001 From: Dante Soares Date: Tue, 2 Feb 2021 13:28:56 -0600 Subject: [PATCH 1/3] Added a migration to convert type tags to assignment-type tags --- ..._replace_type_tags_with_assignment_type.rb | 67 +++++++++++++++++++ db/schema.rb | 2 +- 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20210202184008_replace_type_tags_with_assignment_type.rb diff --git a/db/migrate/20210202184008_replace_type_tags_with_assignment_type.rb b/db/migrate/20210202184008_replace_type_tags_with_assignment_type.rb new file mode 100644 index 00000000..5c2f864d --- /dev/null +++ b/db/migrate/20210202184008_replace_type_tags_with_assignment_type.rb @@ -0,0 +1,67 @@ +class ReplaceTypeTagsWithAssignmentType < ActiveRecord::Migration[6.1] + def up + new_hw_tag = Tag.find_or_create_by name: 'assignment-type:homework' + old_hw_tag_id = Tag.find_by(name: 'type:practice').id + + exercise_ids = ExerciseTag.where(tag_id: old_hw_tag_id).distinct.pluck(:exercise_id) + Exercise.where(id: exercise_ids).preload(:exercise_tags).find_each do |exercise| + if exercise.is_published? + exercise = exercise.new_version + exercise.save! + end + exercise.exercise_tags = exercise.exercise_tags.reject do |et| + old_hw_tag_id == et.tag_id + end + exercise.exercise_tags << ExerciseTag.new(exercise: exercise, tag: new_hw_tag) + exercise.publication.publish.save! + end + + vocab_term_ids = VocabTermTag.where(tag_id: old_hw_tag_id).distinct.pluck(:vocab_term_id) + VocabTerm.where(id: vocab_term_ids).preload(:vocab_term_tags).find_each do |vocab_term| + if vocab_term.is_published? + vocab_term = vocab_term.new_version + vocab_term.save! + end + vocab_term.vocab_term_tags = vocab_term.vocab_term_tags.reject do |vtt| + old_hw_tag_id == vtt.tag_id + end + vocab_term.vocab_term_tags << VocabTermTag.new(vocab_term: vocab_term, tag: new_hw_tag) + vocab_term.publication.publish.save! + end + + new_rd_tag = Tag.find_or_create_by name: 'assignment-type:reading' + old_rd_tag_ids = Tag.where( + name: [ 'type:conceptual', 'type:recall', 'type:conceptual-or-recall' ] + ).pluck(:id) + + exercise_ids = ExerciseTag.where(tag_id: old_rd_tag_ids).distinct.pluck(:exercise_id) + Exercise.where(id: exercise_ids).preload(:exercise_tags).find_each do |exercise| + if exercise.is_published? + exercise = exercise.new_version + exercise.save! + end + exercise.exercise_tags = exercise.exercise_tags.reject do |et| + old_rd_tag_ids.include? et.tag_id + end + exercise.exercise_tags << ExerciseTag.new(exercise: exercise, tag: new_rd_tag) + exercise.publication.publish.save! + end + + vocab_term_ids = VocabTermTag.where(tag_id: old_rd_tag_ids).distinct.pluck(:vocab_term_id) + VocabTerm.where(id: vocab_term_ids).preload(:vocab_term_tags).find_each do |vocab_term| + if vocab_term.is_published? + vocab_term = vocab_term.new_version + vocab_term.save! + end + vocab_term.vocab_term_tags = vocab_term.vocab_term_tags.reject do |vtt| + old_rd_tag_ids.include? vtt.tag_id + end + vocab_term.vocab_term_tags << VocabTermTag.new(vocab_term: vocab_term, tag: new_rd_tag) + vocab_term.publication.publish.save! + end + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/db/schema.rb b/db/schema.rb index 40b39961..15a9f5fc 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2021_02_01_164624) do +ActiveRecord::Schema.define(version: 2021_02_02_184008) do # These are extensions that must be enabled in order to support this database enable_extension "citext" From aa4402194b9e792e93478075da43b5061daee4cc Mon Sep 17 00:00:00 2001 From: Dante Soares Date: Tue, 2 Feb 2021 13:33:00 -0600 Subject: [PATCH 2/3] Also preload publication objects --- ...20210202184008_replace_type_tags_with_assignment_type.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/db/migrate/20210202184008_replace_type_tags_with_assignment_type.rb b/db/migrate/20210202184008_replace_type_tags_with_assignment_type.rb index 5c2f864d..37bb7dd5 100644 --- a/db/migrate/20210202184008_replace_type_tags_with_assignment_type.rb +++ b/db/migrate/20210202184008_replace_type_tags_with_assignment_type.rb @@ -4,7 +4,7 @@ def up old_hw_tag_id = Tag.find_by(name: 'type:practice').id exercise_ids = ExerciseTag.where(tag_id: old_hw_tag_id).distinct.pluck(:exercise_id) - Exercise.where(id: exercise_ids).preload(:exercise_tags).find_each do |exercise| + Exercise.where(id: exercise_ids).preload(:exercise_tags, :publication).find_each do |exercise| if exercise.is_published? exercise = exercise.new_version exercise.save! @@ -17,7 +17,9 @@ def up end vocab_term_ids = VocabTermTag.where(tag_id: old_hw_tag_id).distinct.pluck(:vocab_term_id) - VocabTerm.where(id: vocab_term_ids).preload(:vocab_term_tags).find_each do |vocab_term| + VocabTerm.where(id: vocab_term_ids).preload( + :vocab_term_tags, :publication + ).find_each do |vocab_term| if vocab_term.is_published? vocab_term = vocab_term.new_version vocab_term.save! From 9cddc411984bd87ec0d149e3e4116f4687a8d25d Mon Sep 17 00:00:00 2001 From: Dante Soares Date: Tue, 2 Feb 2021 14:00:33 -0600 Subject: [PATCH 3/3] Don't blow up when type:practice does not exist --- ...202184008_replace_type_tags_with_assignment_type.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/db/migrate/20210202184008_replace_type_tags_with_assignment_type.rb b/db/migrate/20210202184008_replace_type_tags_with_assignment_type.rb index 37bb7dd5..75186aba 100644 --- a/db/migrate/20210202184008_replace_type_tags_with_assignment_type.rb +++ b/db/migrate/20210202184008_replace_type_tags_with_assignment_type.rb @@ -1,22 +1,22 @@ class ReplaceTypeTagsWithAssignmentType < ActiveRecord::Migration[6.1] def up new_hw_tag = Tag.find_or_create_by name: 'assignment-type:homework' - old_hw_tag_id = Tag.find_by(name: 'type:practice').id + old_hw_tag_ids = Tag.where(name: 'type:practice').pluck(:id) - exercise_ids = ExerciseTag.where(tag_id: old_hw_tag_id).distinct.pluck(:exercise_id) + exercise_ids = ExerciseTag.where(tag_id: old_hw_tag_ids).distinct.pluck(:exercise_id) Exercise.where(id: exercise_ids).preload(:exercise_tags, :publication).find_each do |exercise| if exercise.is_published? exercise = exercise.new_version exercise.save! end exercise.exercise_tags = exercise.exercise_tags.reject do |et| - old_hw_tag_id == et.tag_id + old_hw_tag_ids.include? et.tag_id end exercise.exercise_tags << ExerciseTag.new(exercise: exercise, tag: new_hw_tag) exercise.publication.publish.save! end - vocab_term_ids = VocabTermTag.where(tag_id: old_hw_tag_id).distinct.pluck(:vocab_term_id) + vocab_term_ids = VocabTermTag.where(tag_id: old_hw_tag_ids).distinct.pluck(:vocab_term_id) VocabTerm.where(id: vocab_term_ids).preload( :vocab_term_tags, :publication ).find_each do |vocab_term| @@ -25,7 +25,7 @@ def up vocab_term.save! end vocab_term.vocab_term_tags = vocab_term.vocab_term_tags.reject do |vtt| - old_hw_tag_id == vtt.tag_id + old_hw_tag_ids.include? vtt.tag_id end vocab_term.vocab_term_tags << VocabTermTag.new(vocab_term: vocab_term, tag: new_hw_tag) vocab_term.publication.publish.save!