我有一个使用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
谢谢你, 拉吉
答案 0 :(得分:0)
看一下内置的ActiveRecord类:AssociatedValidator
http://api.rubyonrails.org/classes/ActiveRecord/Validations/AssociatedValidator.html
此类允许您执行关联/子类验证。您可能需要使用validates_with而不是普通的验证方法,但它可以很好地完成您所追求的目标。
如果您不想要任何activerecord依赖项,您可以将Validator类复制到您自己的Validators中。