【问题标题】:Rails - Deleting unsaved associated recordsRails - 删除未保存的关联记录
【发布时间】:2013-01-03 07:49:35
【问题描述】:

假设我有一个包含许多文章的用户模型。

如果我多次调用 user.articles.new,我将有许多与用户关联的未保存文章对象。当您运行 user.articles 时,它们是可见的。调用 user.save 将保存所有这些未保存的记录。

如何删除未保存的记录?我打算调用 user.save 但我不希望那些未保存的记录在那里

【问题讨论】:

  • 不想创建新的文章记录,为什么要多次调用user.articles.new

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2


【解决方案1】:

我使用以下解决方法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】:

    一个选项是user.articles.delete_if{|a| a.new_record?},但这听起来像是解决实际问题的一种解决方法,@regulatethis 在您的问题评论中指出了这一点。

    【讨论】:

    • 这实际上并没有破坏记录。使用控制台尝试过。如果没有简单的方法可以做到这一点,我可能应该解决根本问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    相关资源
    最近更新 更多