Skip to content

Instantly share code, notes, and snippets.

@kovacs
Forked from technoweenie/gist:180517
Created October 22, 2009 18:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kovacs/216163 to your computer and use it in GitHub Desktop.
Save kovacs/216163 to your computer and use it in GitHub Desktop.
One other cause is your :dependent callbacks.
class Blog < AR::Base
has_many :posts, :dependent => :destroy
end
This will iterate through every post and call #destroy on it. Use :delete_all if you want to just issue a single delete query. HOWEVER, this won't hit your destroy callbacks on Post.
class Blog < AR::Base
has_many :posts
after_destroy :purge_posts
private
def purge_posts
# one step better, it only loads a page of posts and hits every post destroy callback
posts.paginated_each { |p| p.destroy }
# even better, but not very dry
# cheating a bit w/ a denormalized Comment table,
# but this is a blog comment and i'm pressed for time :)
Comment.delete_all :blog_id => id
Post.delete_all :blog_id => id
end
The solution I've been using for this is WillPaginate.
# instantiate only 30 users at a time
User.paginated_each do |user|
user.do_some_stuff!
end
Keep in mind that using Sequel or DM won't make you immune to all these (though DM has a nice identity map that helps in a lot of cases).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment