Newer
Older
dmpopidor / lib / data_cleanup / rules / answer / fix_duplicate_question.rb
# frozen_string_literal: true
module DataCleanup
  module Rules
    # Fix duplicate question on Answer
    module Answer
      class FixDuplicateQuestion < Rules::Base

        def description
          "Fix duplicate question on Answer"
        end

        def call
          # Take all answers that have duplicate question/plan combo...
          dataset = ::Answer.group(:question_id, :plan_id)
                            .count.select { |k,v| v > 1 }
          # Values looks like [{ [123, 199] => 2}, ...]
          dataset.each do |values, count|
            # ... and destroy all duplicates, keeping the latest record
            ::Answer.where(question: values.first, plan_id: values.last)
                    .order("created_at DESC")
                    .offset(1)
                    .destroy_all
          end
        end
      end
    end
  end
end