Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
One other cause is your :dependent callbacks.
class Blog < AR::Base
has_many :posts, :dependent => :destroy
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
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
The solution I've been using for this is WillPaginate.
# instantiate only 30 users at a time
User.paginated_each do |user|
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