'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