Put this file in your rails project at lib/tasks/db.rake. Use it like
$ rake db:data:validate
namespace :db do | |
namespace :data do | |
desc 'Validates all records in the database' | |
task :validate => :environment do | |
original_log_level = ActiveRecord::Base.logger.level | |
ActiveRecord::Base.logger.level = 1 | |
puts 'Validate database (this will take some time)...' | |
Dir["#{Rails.root}/app/models/**/*.rb"].each { |f| require "#{ f }" } | |
ActiveRecord::Base.subclasses. | |
reject { |type| type.to_s.include? '::' }. # subclassed classes are not our own models | |
each do |type| | |
begin | |
type.find_each do |record| | |
unless record.valid? | |
puts "#<#{ type } id: #{ record.id }, errors: #{ record.errors.full_messages }>" | |
end | |
end | |
rescue Exception => e | |
puts "An exception occurred: #{ e.message }" | |
end | |
end | |
ActiveRecord::Base.logger.level = original_log_level | |
end | |
end | |
end |