ActiveModel为对象及其所有子项级联验证器

时间:2011-08-16 21:26:20

标签: ruby-on-rails-3 validation activemodel

我有一个使用ActiveModel的类(尽管不是ActiveRecord)。它表示从远程Web服务检索的JSON对象。 track对象有一个ReportLayout对象数组,每个ReportLayout对象都有一个插槽数组等。每个模型类都有一些简单的验证器,如'validates_presence_of'等。

如何启动级联验证,从跟踪对象开始,遍历每个级别的每个对象,验证它们,然后验证它们的子数组?堆栈深度为4级,我们很快将再添加两个级别。

class Track
  include ActiveModel::Validations
  attr_accessor :name, :report_layouts
  validates_presence_of :name
  validates_length_of :name, :minimum => 4, :maximum => 256
....
end

class ReportLayout
  include ActiveModel::Validations
  attr_accessor :name, :slots, :start_date, :end_date
  validates_presence_of :name
  validates_length_of :name, :minimum => 4, :maximum => 256
....
end

class Slot
...
class SlotModule

谢谢你, 拉吉

1 个答案:

答案 0 :(得分:0)

看一下内置的ActiveRecord类:AssociatedValidator

http://api.rubyonrails.org/classes/ActiveRecord/Validations/AssociatedValidator.html

此类允许您执行关联/子类验证。您可能需要使用validates_with而不是普通的验证方法,但它可以很好地完成您所追求的目标。

如果您不想要任何activerecord依赖项,您可以将Validator类复制到您自己的Validators中。