'Rails - Deleting unsaved associated records
Lets say I have a user model that has many articles.
If I call user.articles.new many times I will have many unsaved article objects associated with the user. They are visible when you run user.articles. Calling user.save will save all of this unsaved records.
How can I delete unsaved records? I plan on calling user.save but I don't want those unsaved records to be there
Solution 1:[1]
I use the following workaround before_validation :remove_blank_articles!:
class User
has_many :articles
validates_associated :articles
before_validation :remove_blank_articles!
private
def remove_blank_articles!
self.articles = articles - articles.select(&:blank?)
true
end
end
class Article
belongs_to :user
validates_presence_of :title, :body
def blank?
title.blank? and body.blank?
end
end
Solution 2:[2]
An option would be user.articles.delete_if{|a| a.new_record?}, but this sounds like a workaround for the actual problem, to which @regulatethis points in your question's comment.
Solution 3:[3]
Another option would be calling reload. In your case, you can try
user.reload
All those unsaved articles should be removed.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Robert |
| Solution 2 | pdu |
| Solution 3 | Christian Angel Galamay |
