Я бы сказал, что одним из самых больших минусов использования STI является то, что если вы когда-нибудь добавите в таблицу столбец, который не является общим (и что это означает одно и то же) между ВСЕМИ моделями STI, то вы 'Мы просто взорвали вашу целостность данных.
Нулевые поля в (реляционных) базах данных обычно вызывают больше проблем, чем решают.
Я был укушен этим пару раз, и это особенно расстраивает, когда у классов в вашем отношении STI появляются собственные подклассы, которые, в свою очередь, добавляют еще больше столбцов в таблицу.
Я бы сказал, что если вы хотите сделать эту структуру как можно более хорошей, я действительно считаю, что CTI - намного лучшая альтернатива, хотя может быть немного сложно заставить ее работать с рельсами.По крайней мере, это намного сложнее, чем STI.
В верхней части моей головы я могу просто подумать об одном сценарии, где STI может быть разумным, и именно тогда вы имеете дело с моделями транзакций (например,депозиты и снятие средств с банковского счета или около того).В этих случаях обе модели по сути одинаковы, за исключением «направления» транзакции.
Можно также утверждать, что STI «хорош» для быстрого прототипирования, и если вы просто хотите что-то поставитьвместе fast просто чтобы посмотреть, работает ли он вообще, вы можете использовать STI, но как только вы начнете добавлять столбцы, которые не имеют смысла для всех моделей в отношении, вывероятно, следует преобразовать его в CTI или что-то еще.