namespace :db do
task :add_primary_keys => :environment do Dir["#{Rails.root}/app/models/**/*.rb"].each { |path| require path } ActiveRecord::Base.descendants.each do |model| next if model.abstract_class add_primary_key(model.table_name, model.primary_key) end end task :add_primary_key, [:model_name] => :environment do |t, args| model = Object.const_get(args.model_name) add_primary_key(model.table_name, model.primary_key) end private def add_primary_key(table_name, primary_key) begin ActiveRecord::Base.connection.execute "ALTER TABLE #{table_name} ADD PRIMARY KEY (#{primary_key});" rescue => e p e end end
end