Модель наследования Rails по умолчанию - «Наследование отдельных таблиц», и она является самой простой, чистой, обобщенной и наиболее независимой от базы данных вещью.
Это достигается простым наследованием ответа и вопроса от Post.Затем вы создаете таблицу сообщений, в которой есть все поля, которые вы хотите заполнить: «Пост», «Ответ» и «Вопрос».
Наследование отдельных таблиц - не самый экономичный способ, поскольку во всех строках таблицы записей будут все поля «Сообщение», «Ответ» и «Вопрос».Но это обычное дело, и если вы столкнетесь с проблемами пространства в будущем, вы сможете перейти на более масштабируемую модель данных (например, наследование нескольких таблиц).А наследование отдельных таблиц эффективно в том смысле, что для поиска сообщения по идентификатору требуется только один запрос, в то время как в других моделях данных может быть дополнительный запрос для поиска таблицы, в которой находится сообщение (сообщение, вопрос, ответ).
Что касается соединения комментариев и сообщений, вы можете использовать отношение belongs_to
в модели комментариев, которое указывает на сообщение, и отношение has_many
в модели сообщений, которое указывает на комментарий.(Вам нужно добавить целочисленное поле post_id в таблицу комментариев, чтобы заставить это работать).
ср.http://guides.rubyonrails.org/association_basics.html
Вы также захотите добавить индекс для комментариев к post_id для быстрого запроса всех комментариев к сообщению: http://guides.rubyonrails.org/migrations.html.