问题
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
回答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
回答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.
来源:https://stackoverflow.com/questions/14134938/rails-deleting-unsaved-associated-records