From 5e042c25776b3c9688ac99a1eeaa160cfab73227 Mon Sep 17 00:00:00 2001 From: Ron Warholic Date: Sat, 19 Oct 2013 10:03:02 -0400 Subject: [PATCH] Added migration file --- .../20131019023429_change_bike_shop_id.rb | 23 +++++++++++++++++++ db/seeds.rb | 4 +++- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20131019023429_change_bike_shop_id.rb diff --git a/db/migrate/20131019023429_change_bike_shop_id.rb b/db/migrate/20131019023429_change_bike_shop_id.rb new file mode 100644 index 0000000..5503edf --- /dev/null +++ b/db/migrate/20131019023429_change_bike_shop_id.rb @@ -0,0 +1,23 @@ +class ChangeBikeShopId < ActiveRecord::Migration + # We don't use change_column because we have arbitrary strings we + # need to strip the characters from to make the integer values + def up + bikes = Bike.all + remove_column :bikes, :shop_id + add_column :bikes, :shop_id, :integer, :unique => true + + # deconflict shop ids + bikes.each do |bike| + new_id = bike.shop_id.gsub(/[^\d]/, '').to_i rescue 1 + while bikes.map(&:shop_id).include? new_id + new_id += 1 + end + bike.shop_id = new_id + end + bikes.each(&:save) + end + + def down + change_column :bikes, :shop_id, :string + end +end diff --git a/db/seeds.rb b/db/seeds.rb index 2d77169..b56fc3b 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -16,8 +16,10 @@ end if BikeBrand.all.empty? and BikeModel.all.empty? # Need to use DEFAULT instead of explicit IDs that are used in the sql file, # so that the PG table ID sequence is incremented + # + # Note the drop(1) which assumes we have a junk PRAGMA line at the top load_statements = File.readlines(File.join(Rails.root, 'db', 'seed', 'sql', 'bike_brands_and_models.sql')).drop(1).map do |statement| - statement.sub(/VALUES\(\d+,/, 'VALUES(DEFAULT,').tap {|x| puts x } + statement.sub(/VALUES\(\d+,/, 'VALUES(DEFAULT,') end ActiveRecord::Base.connection.execute(load_statements.join) end