我的工作模型有一个复杂的表单。它接受Credits,Images和Videos的嵌套属性。 (它是Eloy Duran复杂形式示例的修改版本)
当我这样做时(在work.rb中):
validates_presence_of :credits
当我尝试提交没有任何信用的表单时它会正确验证,但是如果我删除最后一个信用额度(通过检查将“_delete”添加到信用的属性的check_box),它就不会验证。它提交的作品删除了唯一一个没有任何学分的学分。
您对我如何正确验证这些内容有任何想法吗?
答案 0 :(得分:2)
您需要的是:
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
credits_present
中的条件可能有点乱,所以让我分解一下,万一你不跟随。如果any?
中的任何项对所提供的块作出响应,true
方法将返回Enumerable
。在这种情况下,我们检查该项目是否将被删除。因此,如果任何信用额不会被删除,我们会得到true
。如果true
,我们状态良好,我们至少有一个不会被删除的赠送金额。另一方面,如果我们得到false
,我们要么知道没有任何信用,要么删除任何信用。在这种情况下,验证失败,我们添加错误。
答案 1 :(得分:-2)
尝试在work.rb
中使用 before_save
before_save :check_credits
private
def check_credits
self.credits > 0
end
如果点数<= 0,则保存不会通过。