namespace :db do
desc 'Find missing foreign key database indexes' task :missing_indexes => :environment do c = ActiveRecord::Base.connection c.tables.collect do |t| columns = c.columns(t).collect(&:name).select { |x| x.ends_with?('_id') || x.ends_with?('_type') } indexed_columns = c.indexes(t).collect(&:columns).flatten.uniq unindexed = columns - indexed_columns unless unindexed.empty? puts "#{t}:\n\t #{unindexed.join(", ")}" end end end namespace :missing_indexes do desc 'Print migration statements for missing foreign key database indexes' task :migrators => :environment do c = ActiveRecord::Base.connection c.tables.collect do |t| columns = c.columns(t).collect(&:name).select { |x| x.ends_with?('_id') || x.ends_with?('_type') } indexed_columns = c.indexes(t).collect(&:columns).flatten.uniq unindexed = columns - indexed_columns unindexed.each do |c| puts "add_index :#{t}, :#{c}" end end end end
end