Представлять несколько объектов Null / Generic в ассоциации ActiveRecord? - PullRequest
1 голос
/ 21 ноября 2011

У меня есть модель Casefile, которая принадлежит_ доктору.В дополнение ко всем «настоящим» врачам, есть несколько общих докторов: «лечиться самостоятельно», «не указано» и «удалено» (раньше у него был настоящий доктор, но больше нет).Я подозреваю, что в будущем появятся еще более общие значения.

Я начал со специальных «докторов» в базе данных, созданной из семян.Обычные доктора должны реагировать только на методы name, title, company, published?.

Это сработало с одним, было перегружено двумя, и теперь кажется полностью сломленным.Я хочу изменить поведение и не могу понять, как это проверить, плохой знак.Создание всех универсальных объектов для тестирования также является проблемой, включая ложные значения для проверки правильности требуемых атрибутов Doctor.

Шаблон Null Object хорошо работает для одного универсального объекта.Метод «name» может возвращать «self-treatment», как продемонстрировал Крейг Амброуз .

Какой шаблон мне следует использовать, когда существует несколько универсальных объектов с очень ограниченным состоянием?

1 Ответ

0 голосов
/ 21 ноября 2011

Мне кажется, что вы могли бы просто добавить дополнительное поле в модель Casefile, которое называется, скажем, treatment (которое будет установлено как "самообслуживаемое", "не указано" и т. Д.)

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

validate :has_doctor_or_treatment, :on => :save

def has_doctor_or_treatment
  (self.doctor.exists? || !treatment.blank?)
end

Затем вы можете использовать поле обработки, чтобы найти Casefile, используя .where:

Casefile.where(:treatment => "self-treated")

Если бы вы хотели, вы могли бы пройти курс лечения в качестве дополнительной модели, где Casefile has_one Doctor и has_one Treatment - но, похоже, ваши потребности слишком просты, чтобы это оправдать.

...