2016-02-02 2 views
1

У меня есть три объекта ActiveRecord, которые мне нужно проверить в целом, и я не совсем уверен, как смоделировать или реализовать это.Зависимая проверка на нескольких объектах Rails

модели перечислены ниже с их зависимостями/валидаций (псевдо-рельсы кода):

  • Кэмпграунд
    • принадлежит городу
  • Город
    • принадлежит государства
    • должен иметь уникальное имя в пределах своего государства
  • государственного
    • имеет много городов

При обновлении Campground записи, необходимо убедиться в том, что и город, и государство Действителен до пытается обновить запись в палаточном лагере. Если какой-либо шаг выходит из строя, мне нужно убедиться, что ничего не спасено.

Очень понравилась бы помощь!

ответ

2

Прежде всего, это не Campground, подтверждающий действительность City или State, к которому принадлежит. Скорее всего, это будут существующие записи, которые не изменяются при создании или обновлении палаточного лагеря.

Что касается проверки того, что ассоциация установлена, с Rails 5 любая ассоциация belongs_to автоматически подтвердит, что ассоциация установлена ​​и что запись существует. С Rails 4 вы можете просто добавить проверку presence для объединения в Campground:

belongs_to :city 
validates :city, presence: true 

Для проверки уникальности названия города в государстве, вы можете просто использовать область применения:

belongs_to :state 
validates :name, uniqueness: {scope: :state_id} 

Для всего Кроме того, на самом деле отвечает State, чтобы убедиться, что он действителен в том месте, где он создан или обновлен. Разве какая-то часть его действительности исходит из коллекции дочерних объектов, с которой она связана? В этом случае вы можете добавить подтверждение validates_associated.

Вы можете найти в документации для этой проверки здесь: http://edgeguides.rubyonrails.org/active_record_validations.html#validates-associated

В основном, в пределах вашей State модели вы бы добавить:

has_many :cities 
validates_associated :cities 

Но это будет только проверять, что дети действуют при обновлении/создание родитель, а не в противоположном направлении.

Смежные вопросы