Rails - 如何防止删除父级的所有子记录


Listing < AR
  has_many :images
  accepts_nested_attributes_for :images, :allow_destroy => true
  validate :validate_image_count
  def validate_image_count
    errors.add_to_base("too few") if images.length < 1
  end
end
Image < AR
  belongs_to :listing
end

在我的列表#编辑表单中,我使用 fields_for 为所有图像提供字段以及用于删除图像的复选框。这工作正常。我想强制执行一项检查,以便仅当列表至少包含一张图片且最多 6 张时,该列表才有效。

在我当前的设置中,我可以编辑和删除所有图像,然后更新列表。

我尝试使用如上所示的验证,但没有调用。可能只是nested_attributes轨道的工作方式。强制执行此检查的最佳方法是什么?

因为调用验证方法时不会删除图像,因此它将在图像长度上返回 true。你可以使用marked_for_destruction吗?

def validate_image_count
    errors.add_to_base("too few") self.images.any? { |i| i.marked_for_destruction? }
end

相关内容

  • 没有找到相关文章

最新更新