简体   繁体   中英

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

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

An option would be user.articles.delete_if{|a| a.new_record?} 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.

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

user.reload

All those unsaved articles should be removed.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM