2011-08-16 3 views
0

ActiveModel (ActiveRecord가 아님)을 사용하는 클래스가 있습니다. 원격 웹 서비스에서 검색된 JSON 객체를 나타냅니다. track 객체는 ReportLayout 객체의 배열을 가지며 각 ReportLayout 객체는 슬롯 배열 등을가집니다. 각 모델 클래스는 'validates_presence_of'등과 같은 간단한 유효성 검사기를 가지고 있습니다.ActiveModel 객체와 그 모든 자식에 대한 계단식 유효성 검사기

트랙 개체부터 시작하여 각 수준의 각 개체를 통과하여 유효성을 검사 한 다음 해당 자식 배열의 유효성을 검사하는 계단식 유효성 검사를 시작하려면 어떻게해야합니까? 스택은 4 레벨만큼 깊어서 곧 2 레벨이 추가됩니다. 이 클래스를 사용하면/하위 수준의 검증을 관련 수행 할 수 있습니다 AssociatedValidator

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

:

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

감사합니다. @Gazler, 하지만 ActiveRecord를 사용하지 않는다고 말한 것처럼 말입니다. 시도 할 때 validates_associated :

답변

0

을 주셔서 감사합니다. 아마 당신은 보통 validates 메소드 대신에 validates_with를 사용해야 할 것이다. 그러나 그것은 당신이 정확히 무엇을하고 있는지에 대해 꽤 잘 작동한다.

activerecord 의존성을 원하지 않는다면 Validator 클래스를 자신의 Validator에 복사하면됩니다.