Report abuse


			
class ConvertAllCurrentDatetimesToUtc < ActiveRecord::Migration
  TIME_DIFFERENCE_FROM_UTC = 10.hours # Based on the timezone your data is already stored in (AEST in my case)

  MODELS_WITH_DATETIME_FIELDS = {
    "Offer" => %w(valid_from valid_to),
    "Payment" => %w(paid_at),
    "Promotion" => %w(valid_from valid_to),
    "Purchase" => %w(purchased_at),
    "Refund" => %w(refunded_at)
  }

  MODELS_WITH_DATETIME_FIELDS.keys.each do |class_name|
    eval "class #{class_name} < ActiveRecord::Base; end"
  end

  def self.up
    update_datetime_fields(-TIME_DIFFERENCE_FROM_UTC)
  end

  def self.down
    update_datetime_fields(TIME_DIFFERENCE_FROM_UTC)
  end

  private
    def self.update_datetime_fields(time_difference)
      MODELS_WITH_DATETIME_FIELDS.each_pair do |class_name, fields|
        class_name.constantize.find(:all).each do |model|
          announce "Updating #{class_name} #{model.id}"
          fields.each do |f|
            model[f] = model[f] + time_difference if model[f]
          end
          model.save_without_validation
        end
      end      
    end
end