class UseIntegerMathForMoney < ActiveRecord::Migration def self.up add_column "donations", :reported_required_fee_dollars, :int add_column "donations", :reported_required_fee_cents, :int Donation.find(:all).each do |p| amt = p.reported_required_fee.divmod(1) p.update_attribute :reported_required_fee_dollars, amt[0] p.update_attribute :reported_required_fee_cents, ((amt[1]*100).divmod(1)[0]) end remove_column "donations", :reported_required_fee add_column "donations", :reported_suggested_fee_dollars, :int add_column "donations", :reported_suggested_fee_cents, :int Donation.find(:all).each do |p| amt = p.reported_suggested_fee.divmod(1) p.update_attribute :reported_suggested_fee_dollars, amt[0] p.update_attribute :reported_suggested_fee_cents, ((amt[1]*100).divmod(1)[0]) end remove_column "donations", :reported_suggested_fee end def self.down add_column "donations", :reported_required_fee, :decimal, :precision => 10, :scale => 2, :default => 0.0 Donation.find(:all).each do |p| p.update_attribute :reported_required_fee, (p.reported_required_fee_dollars + (p.reported_required_fee_cents / 100.0)) end remove_column "donations", :reported_required_fee_dollars remove_column "donations", :reported_required_fee_cents add_column "donations", :reported_suggested_fee, :decimal, :precision => 10, :scale => 2, :default => 0.0 Donation.find(:all).each do |p| p.update_attribute :reported_suggested_fee, (p.reported_suggested_fee_dollars + (p.reported_suggested_fee_cents / 100.0)) end remove_column "donations", :reported_suggested_fee_dollars remove_column "donations", :reported_suggested_fee_cents end end