I wonder what is the best way to delete all the records of the association on a specified condition.
For example, you have User model that has many Post(s). How would keep all the recent User’s Posts and delete all the last Posts when a Users have more than 25 ?
There is a solution like that:
def self.delete_old_posts
old_posts =
users = includes(:post)
users.each do |user|
old_posts =+ user.posts.offset(25) unless user.posts.empty?
end
I wonder what is the best way to delete all the records of the association
on a specified condition.
For example, you have User model that has many Post(s). How would keep all
the recent User's Posts and delete all the last Posts when a Users have more
than 25 ?
There is a solution like that:
def self.delete_old_posts
old_posts =
users = includes(:post)
users.each do |user|
old_posts =+ user.posts.offset(25) unless user.posts.empty?
end
old_posts.delete_all
end
Any other ideas ? Thank you.
You need to order the posts otherwise there is no guarantee which ones
will be deleted. I don't think you need includes(:post). Also you
don't need the unless. Are you sure you want delete_all? That will
not call callbacks. In fact I am not sure you can use delete_all in
this situation.
Thank you Colin.
Yes, I know about callbacks, I don’t care about it in this case. I just want to clean posts and keep not more than the last 25 ones. Thank you for the tip regarding the ordering, I’ll take care about that.