From 0a83f9c86a81e8648d30a0e71765febf9770ef07 Mon Sep 17 00:00:00 2001 From: Ben Tillman Date: Wed, 16 Nov 2011 21:37:29 +0800 Subject: [PATCH] Added tag_id to field_groups and fix some bugs in the super_tags migration --- .../20111116091952_add_field_groups_tag_id.rb | 9 ++++ lib/tasks/super_tags.rake | 44 +++++++++---------- 2 files changed, 31 insertions(+), 22 deletions(-) create mode 100644 db/migrate/20111116091952_add_field_groups_tag_id.rb diff --git a/db/migrate/20111116091952_add_field_groups_tag_id.rb b/db/migrate/20111116091952_add_field_groups_tag_id.rb new file mode 100644 index 0000000000..975a23becd --- /dev/null +++ b/db/migrate/20111116091952_add_field_groups_tag_id.rb @@ -0,0 +1,9 @@ +class AddFieldGroupsTagId < ActiveRecord::Migration + def self.up + add_column :field_groups, :tag_id, :integer + end + + def self.down + remove_column :field_groups, :tag_id + end +end diff --git a/lib/tasks/super_tags.rake b/lib/tasks/super_tags.rake index 5732944992..670a1eca2d 100755 --- a/lib/tasks/super_tags.rake +++ b/lib/tasks/super_tags.rake @@ -3,8 +3,7 @@ namespace :super_tags do desc "Migrate super_tags plugin to core custom_fields" task :migrate => :environment do def dryrun? - true - #~ ENV['DRYRUN'] == 'true' + ENV['DRYRUN'] == 'true' end connection = ActiveRecord::Base.connection @@ -18,11 +17,11 @@ namespace :super_tags do tag_ids = field_data.map {|row| row['tag_id']}.uniq tag_ids.each do |tag_id| tag = ActsAsTaggableOn::Tag.find(tag_id) - group_params = {:tag_id => tag.id, :name => tag.name} + group_params = {:tag_id => tag.id, :name => tag.name + ' Details'} if dryrun? puts group_params else - group = CustomFieldGroup.create group_params + group = FieldGroup.create group_params group_ids[tag_id] = group.id end end @@ -51,26 +50,27 @@ namespace :super_tags do end tag_ids.each do |tag_id| - data = connection.select_all "SELECT * FROM tag#{tag_id}s" - keys = data.first.keys.reject {|k| %w(id customizable_type).include?(k)} + if (data = connection.select_all "SELECT * FROM tag#{tag_id}s").present? + keys = data.first.keys.reject {|k| %w(id customizable_type).include?(k)} - klass_names = data.map {|row| row['customizable_type']}.uniq - klass_names.each do |klass_name| - klass = klass_name.constantize - values = data.map do |row| - keys.map {|k| row[k] =~ /^\d$/ ? row[k] : "'#{row[k]}'"}.join(', ') - end - keys.shift # We don't need customizable_id anymore + klass_names = data.map {|row| row['customizable_type']}.uniq + klass_names.each do |klass_name| + klass = klass_name.constantize + values = data.map do |row| + keys.map {|k| row[k] =~ /^\d*$/ ? row[k] : "'#{row[k].gsub("'","''")}'"}.join(', ') + end + keys.shift # We don't need customizable_id anymore - insert = %Q{ - INSERT INTO #{klass.table_name} (#{([klass.primary_key] + keys).join(', ')}) - VALUES (#{values.join('), (')}) - ON DUPLICATE KEY UPDATE #{keys.map {|k| "#{k} = VALUES(#{k})"}.join(', ')} - } - if dryrun? - puts insert - else - connection.execute insert + insert = %Q{ + INSERT INTO #{klass.table_name} (#{([klass.primary_key] + keys).join(', ')}) + VALUES (#{values.join('), (')}) + ON DUPLICATE KEY UPDATE #{keys.map {|k| "#{k} = VALUES(#{k})"}.join(', ')} + } + if dryrun? + puts insert + else + connection.execute insert + end end end end