Ruby on rails Rails复杂表单验证?

Ruby on rails Rails复杂表单验证?,ruby-on-rails,validation,forms,nested,Ruby On Rails,Validation,Forms,Nested,我的工作模型有一个复杂的表单。它接受信用卡、图像和视频的嵌套属性。这是Eloy Duran的复杂形式示例的修改版本 我想验证是否存在至少一个信用证 我想验证是否存在至少一个图像或一个视频 当我在work.rb中工作时: validates_presence_of :credits 当我尝试在没有任何信用的情况下提交表单时,它会正确地进行验证,但如果我通过选中一个复选框来删除最后一个信用,则它不会进行验证,该复选框会将删除添加到信用的属性中。它提交的工作删除了一个和唯一的学分离开没有任何学分的

我的工作模型有一个复杂的表单。它接受信用卡、图像和视频的嵌套属性。这是Eloy Duran的复杂形式示例的修改版本

我想验证是否存在至少一个信用证 我想验证是否存在至少一个图像或一个视频 当我在work.rb中工作时:

validates_presence_of :credits 
当我尝试在没有任何信用的情况下提交表单时,它会正确地进行验证,但如果我通过选中一个复选框来删除最后一个信用,则它不会进行验证,该复选框会将删除添加到信用的属性中。它提交的工作删除了一个和唯一的学分离开没有任何学分的工作

您知道如何正确验证这些吗?

在保存到work.rb之前尝试使用


 before_save :check_credits

private
 def check_credits
   self.credits > 0
 end

如果学分你需要的是以下内容:

validate :credits_present

private

  def credits_present
    unless credits.any?{|c| !c.marked_for_destruction? }
      errors.add_to_base "You must provide at least one credit"
    end
  end

现在的条件积分可能有点混乱,所以让我把它分解一下,以防你不明白。有吗?如果可枚举项中的任何项对提供的块响应为true,则方法返回true。在这种情况下,我们检查项目是否不会被删除。因此,如果任何信用卡都不会被删除,我们就得到了真实的结果。如果是真的,我们的状态很好,我们至少有一个信用不会被删除。另一方面,如果我们得到假,我们要么知道没有任何信用,要么知道任何存在的信用都将被删除。在这种情况下,验证失败,我们添加了错误。

否,这不起作用。我认为问题在于,由于在保存之前,信用卡被标记为删除,并且隐藏的复选框值被设置为1,因此信用卡在保存完成之前仍然存在。那么self.credits.size>0还是self.credits.blank?我不会做这项工作。如果我可以访问提交学分的_delete参数,我可以停止保存,但我找不到从模型中访问该属性的方法。谢谢Peter,我一直在寻找标记为_的销毁,但是有吗?你用的方法太棒了。