STI + пространства имен - PullRequest
       26

STI + пространства имен

0 голосов
/ 20 апреля 2011

Мне нужно иметь возможность планировать напоминания для пользователей. Поэтому я подумал, что могу просто создать базовую модель Reminder и использовать STI для создания классов-потомков, которые переопределяют функцию fire(), вызываемую при срабатывании напоминания. Но разные роли пользователей имеют похожие типы напоминаний. Таким образом, они должны быть в пространстве имен, например Adult::BrushTeethReminder отправляет электронное письмо пользователю, Kid::BrushTeethReminder публикует на детской стене FB.

Возможно ли это с ИППП и как, если да? Другой способ, которым я вижу, это просто префикс названия модели, например KidBrushTeethReminder. Или пойти еще глубже - напишите фабричный метод, который создает объекты в соответствии с типом. Или есть более чистый способ?

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

Я обнаружил, что вы можете использовать STI для моделей в разных пространствах имен.Вам просто нужно поместить их в соответствующие подпапки.Например, Kid::BrushTeethReminder следует поместить в app/models/kid в файле brush_teeth_reminder.rb

1 голос
/ 20 апреля 2011

Я вижу два типа напоминаний, одно для взрослых и одно для детей. Лично я бы использовал STI под названием Reminder, а одна модель BrushTeeth наследовала от Reminder. В модели BrushTeeth у меня было бы два логических столбца с именами for_adult и for_kid.

В вашем Пространстве имен для взрослых вы можете проверить BrushTeeth, запросив, установлен ли для столбца for_adult значение TRUE, и основывать свою логику / реализацию оттуда. А для пространства имен Kid вы проверяете столбец for_kid.

Имея в качестве основы напоминание, вы можете легко иметь другие напоминания (например, душ, ванна, гвозди и т. Д.). Модель напоминания также поставляется со столбцом типа, поскольку это модель ИППП.

Надеюсь, это поможет.

...