A quick rake task to allow you to quickly re-save all objects in a model class (maybe you’ve added some new code in an ActiveRecord filter and need to run the code on existing persisted objects).
namespace :db do
desc "Resave all objects in a model class."
task :resave_objects => :environment do
raise 'USAGE: rake db:resave_objects MODEL=MyModelName' if ENV["MODEL"].nil?
unsaved = []
model_class.find(:all).each do |o|
if o.save
puts "#{model_class.to_s}(#{o.id}) re-saved\""
else
unsaved << o
end
end
if unsaved.length > 0
puts "Some objects failed to save. Here are their IDs:"
unsaved.each do |o|
puts "#{o.id} : #{o.errors.full_messages}"
end
end
end
end
def model_class
if (ENV["MODEL"].split('::').size > 1)
ENV["MODEL"].split('::').inject(Kernel) {|scope, const_name| scope.const_get(const_name)}
else
Object.const_get(ENV["MODEL"])
end
end
