Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-如何防止删除父记录的所有子记录 清单true 验证:验证\u图像\u计数 def验证图像计数 错误。如果images.length_Ruby On Rails_Validation_Nested Forms_Nested Attributes_Fields For - Fatal编程技术网

Ruby on rails Rails-如何防止删除父记录的所有子记录 清单true 验证:验证\u图像\u计数 def验证图像计数 错误。如果images.length

Ruby on rails Rails-如何防止删除父记录的所有子记录 清单true 验证:验证\u图像\u计数 def验证图像计数 错误。如果images.length,ruby-on-rails,validation,nested-forms,nested-attributes,fields-for,Ruby On Rails,Validation,Nested Forms,Nested Attributes,Fields For,在我的列表#编辑表单中,我使用字段_为所有图像提供字段,并使用复选框删除图像。这很好用。我想强制执行一个检查,这样列表只有在至少有一个图像且最多有6个图像时才有效 在我当前的设置中,我可以编辑和删除所有图像,然后更新列表 我已经尝试使用如上所示的验证,但没有调用它。这可能就是rails中嵌套的_属性的工作方式。执行此检查的最佳方法是什么?因为调用验证方法时图像不会被删除,因此图像长度将返回true。您可以使用标记的_进行_销毁吗 Listing < AR has_many :image

在我的列表#编辑表单中,我使用字段_为所有图像提供字段,并使用复选框删除图像。这很好用。我想强制执行一个检查,这样列表只有在至少有一个图像且最多有6个图像时才有效

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


我已经尝试使用如上所示的验证,但没有调用它。这可能就是rails中嵌套的_属性的工作方式。执行此检查的最佳方法是什么?

因为调用验证方法时图像不会被删除,因此图像长度将返回true。您可以使用标记的_进行_销毁吗

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

你能把保存记录的那部分代码加上去吗?
def validate_image_count
    errors.add_to_base("too few") self.images.any? { |i| i.marked_for_destruction? }
end