2014-01-03 3 views
0

Я пытаюсь понять, как лучше всего моделировать некоторые данные для приложения rails с использованием активной записи.Активная запись: родительская модель с несколькими типами дочерних моделей

Stack
Rails 4.1.0.beta1 & Рубиновые 2.0 & Postgres

Вот мой сценарий. У меня есть 3 «Типы контента» статьи, видео и графики. Моя цель - иметь возможность запрашивать Active Record для всего содержимого, которое я опубликовал, и которое является самым новым в базе данных. Например, дайте мне последние 10 элементов контента независимо от того, что «тип» отображается эффективным образом.

Вот мои первые мысли:
контент - has_many: статьи, видео, графические published_date: DateTime Статья - belongs_to: содержание Видео - belongs_to: содержание Graphic - belongs_to: содержание

I я думаю, что это что-то вроде этого, но я не уверен, что это самый эффективный способ. Все статьи, видео и графика наследуют атрибуты из модели Content. Но каждая статья, видео и графика будут иметь свои собственные атрибуты.

Каков наилучший способ организовать эти данные для скорости и роста, если введен новый тип контента? Заранее спасибо.

ответ

0

Во-первых, следуя модели отношений вы выложенные в вашей «Вот мои первые мысли»:

Если вы должны были добавить новый тип содержимого вниз по дороге, я считаю, это должно быть так же просто, как добавление правильного has_many и принадлежит к тегам в заголовках модели. У вашей модели контента может быть столько же has_many, сколько вам нужно, сколько угодно типов контента.

Для получения новейших 10 элементов контента вы можете выполнить объединение в трех таблицах типов контента, которые соответствуют идентификатору содержимого, захватывая 10 новейших элементов в каждой таблице, затем сортируйте их в обратном хронологическом порядке и возьмите первые 10 элементов.

+0

Хорошо, просто не был уверен, что это был самый умный способ. Но спасибо за ответ, тем не менее. :) – corbanb

Смежные вопросы