ActiveModel каскадный валидатор для объекта и всех его дочерних элементов - PullRequest
0 голосов
/ 17 августа 2011

У меня есть класс, который использует ActiveModel (хотя не ActiveRecord).Он представляет собой объект 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 голосов
/ 03 ноября 2011

Взгляните на встроенный класс ActiveRecord: AssociatedValidator

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

Этот класс позволяет выполнять проверки связанного / дочернего класса.Вероятно, вам нужно будет использовать validates_with, а не обычный метод validates, но он работает достаточно хорошо для того, чтобы делать именно то, что вам нужно.

Если вы не хотите никаких зависимостей activerecord, вы можете просто скопировать класс Validator вваши собственные валидаторы.

...