0

ActiveModel を使用するクラスがあります (ActiveRecord ではありません)。これは、リモート Web サービスから取得された JSON オブジェクトを表します。トラック オブジェクトには ReportLayout オブジェクトの配列があり、各 ReportLayout オブジェクトにはスロットの配列などがあります。各モデル クラスには、「validates_presence_of」などのいくつかの単純なバリデータがあります。

各レベルで各オブジェクトを通過し、それらを検証してから、子の配列を検証する、追跡オブジェクトから始まるカスケード検証を開始するにはどうすればよいですか? スタックは 4 レベルの深さで、すぐにさらに 2 つのレベルを追加する予定です。

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

ありがとう、ラージ

4

1 に答える 1

0

組み込みのActiveRecordクラスを見てください:AssociatedValidator

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

このクラスを使用すると、関連付けられた/子クラスの検証を行うことができます。通常のvalidatesメソッドではなくvalidates_withを使用する必要があるかもしれませんが、それはあなたが求めていることを正確に行うために非常にうまく機能します。

activerecordの依存関係が必要ない場合は、Validatorクラスを独自のValidatorにコピーするだけです。

于 2011-11-03T05:50:46.150 に答える