Matthew Hui
Matthew Hui

Reputation: 3361

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

Upvotes: 9

Views: 2706

Answers (3)

Another option would be calling reload. In your case, you can try

user.reload

All those unsaved articles should be removed.

Upvotes: 0

Robert
Robert

Reputation: 1946

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

Upvotes: 5

pdu
pdu

Reputation: 10413

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.

Upvotes: 2

Related Questions