Этот пункт для меня оказался самым сложным и времязатратным, так как проблемы были как и с придумыванием достаточно оптимального решения, так и с его дальнейшей реализацией. Причем с реализацией проблем было намного больше. Ну, по порядку.
Если бы поля у всех пользователей были одинаковые, то хватило бы только добавить еще одно поле Тип. Но, так как поля у разных типов пользователей разные, то сложности начинаются с того, что нужно решить, как избавиться от лишних полей для пользователей, у которых этих полей быть не должно. Я обдумывал три разных решений:
- Тупо делать отдельную таблицу под каждый тип с полным набором полей.
Такое решение, например, предлагается в ридми Devise. В каждой таблице типа пользователя в этом варианте будут повторяющиеся атрибуты типа e-mail, пароля, итд, что уже является очевидным