Я написал статью на эту тему, включая несколько советов по работе с STI:
Наследование в одной таблице в Rails
Короче говоря: должны существовать четкие отношения наследования в стиле OO между объектами (как красноречиво говорится в womble), а не только некоторые общие данные. Если не существует естественной и очевидной иерархии классов, дизайн STI может стать трудным для поддержки по мере развития вашего приложения.
Во-вторых, вы должны подумать, важно ли иметь все данные в одной таблице. С полиморфными ассоциациями ваши запросы к базе данных станут более сложными и, возможно, более медленными. Если вы планируете перечислить все объекты вместе на сайте (например, в таблице), то STI может быть подходящим вариантом.
В-третьих, убедитесь, что ваши дочерние классы не имеют слишком много уникальных атрибутов. Со всеми данными в одной таблице вам не нужно много неглобальных столбцов. Мало того, что они занимают место (не главная проблема), но они делают структуру данных запутанной. Если у вас есть «специальные» столбцы, вы должны явно объяснить их в своем коде.
Наконец, если вы используете STI, я настоятельно рекомендую использовать один контроллер для всех ваших дочерних моделей. Основная функция контроллера заключается в предоставлении доступа к объектам, и если к объектам нужно обращаться совершенно по-разному, STI, возможно, не был правильным выбором дизайна с самого начала.
Ознакомьтесь с моей статьей (ссылка выше), чтобы узнать больше полезных советов.