2011-08-16 31 views
0

我有一個使用ActiveModel的類(不是ActiveRecord)。它表示從遠程web服務檢索到的JSON對象。軌道對象有一個ReportLayout對象數組,每個ReportLayout對象都有一個槽陣列等等。每個模型類都有一些簡單的驗證器,比如'validates_presence_of'等等。對象及其所有子項的ActiveModel級聯驗證器

如何開始級聯驗證,從跟蹤對象開始,遍歷每個級別的每個對象,驗證它們,然後驗證它們的子級數組?這個堆棧有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

您還沒有發佈您的關聯,但是從我收集的內容中,您需要使用http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#method-i-validates_associated – Gazler

+0

Thanks @Gazler,但像我說的我沒有使用ActiveRecord。當我嘗試validates_associated:

回答

0

在內置的ActiveRecord類請看:AssociatedValidator

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

這個類可以讓你做相關的/子類的驗證。您可能需要使用validates_with而不是普通的驗證方法,但它對於完成後面的工作非常有效。

如果您不想要任何activerecord依賴關係,您可以將Validator類複製到您自己的驗證器中。

相關問題