Rails - Deleting unsaved associated records
Asked Answered
A

3

9

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

Alexis answered 3/1, 2013 at 7:49 Comment(1)
Why are you calling user.articles.new many times if you don't want to create new article records?Freely
S
5

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
Sprang answered 23/10, 2013 at 20:48 Comment(0)
D
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.

Doodle answered 3/1, 2013 at 7:58 Comment(1)
That doesn't actually destroy the record. Tried it using console. If there's no easy way to do it I should probably just fix the root problemAlexis
M
0

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

user.reload

All those unsaved articles should be removed.

Marandamarasca answered 6/5, 2022 at 11:42 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.