Rails复杂表格验证?

时间:2009-10-05 16:20:25

标签: ruby-on-rails validation forms nested

我的工作模型有一个复杂的表单。它接受Credits,Images和Videos的嵌套属性。 (它是Eloy Duran复杂形式示例的修改版本)

  • 我想验证至少一个Credit
  • 的存在
  • 我想验证至少一个图片或一个视频的存在

当我这样做时(在work.rb中):

validates_presence_of :credits 

当我尝试提交没有任何信用的表单时它会正确验证,但是如果我删除最后一个信用额度(通过检查将“_delete”添加到信用的属性的check_box),它就不会验证。它提交的作品删除了唯一一个没有任何学分的学分。

您对我如何正确验证这些内容有任何想法吗?

2 个答案:

答案 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,则保存不会通过。