Дизайн блогов - PullRequest
       6

Дизайн блогов

3 голосов
/ 14 июля 2011

Я учу себя рельсам, и хочу создать блог, похожий на Tumblr. Он будет иметь несколько различных типов сообщений, таких как письменный текст, фото-посты, аудио-посты и видео-посты.

Моя первоначальная мысль заключалась в том, чтобы иметь разные модели для каждого типа поста, поскольку для каждого типа поста будут разные правила. Тем не менее, я все еще учусь и не знаю, чего я не знаю, так что, может быть, есть лучший способ пойти о вещах (может быть, только одна модель для сообщений и таблица для типов сообщений?).

Любые отзывы будут оценены.

Ответы [ 2 ]

4 голосов
/ 14 июля 2011

Вероятно, хорошая реляционная база данных и объектно-ориентированный дизайн будут иметь одну основную модель поста, которая, вероятно, будет иметь в основном одинаковые атрибуты и поведение со всеми типами постов. Это может даже выступать в качестве ваших текстовых сообщений.

Это также может упростить отношения с сообщениями (например, «пользователи имеют много сообщений» против «пользователи имеют много текстовых сообщений и / или видео сообщений и / или т. Д.»).

Затем создайте таблицу соединений «вложения», которая определяет тип вложения (поэтому вы можете иметь несколько вложений на одно сообщение):

CREATE TABLE attachments (post_id, media_type, media_id)

Затем создайте таблицу и модель для каждого типа для конкретных моделей поведения и обработчиков для типов носителей.

CREATE TABLE audios (id, transcription, storage);
CREATE TABLE videos (id, location, format, storage);

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

Почтовая модель будет иметь

has_many :attachments

и вложения будут иметь

belongs_to :post
belongs_to :media, :polymorphic => true

и каждая из медиа-моделей будет иметь

has_one :attachment, :as => :media

тогда вы можете получить доступ к вашим медиа через

post.attachments[0].media

Вы можете пропустить таблицу вложений и объединить атрибуты с таблицей сообщений, если вам нужен только один тип мультимедиа на сообщение

Извините, я продолжаю редактировать, я продолжаю думать о других вещах, чтобы сказать:)

2 голосов
/ 14 июля 2011

Вот несколько вариантов, которые могут работать.

Во-первых, вы можете просто сделать одну модель со столбцами для text_content, video_link, photo_link и т. Д.

Затем, по вашему мнению, вы можете передать представление сообщения пользователю (возможно, с использованием частичного) с другим видом в зависимости от того, какие атрибуты имеют значения.

Второй вариант - создать меньшую таблицу Post, в которой только что была ключевая информация, и использовать серию отношений has_one с другими элементами.

Единственное преимущество, которое я вижу во втором варианте, заключается в том, что ваша таблица БД будет меньше, поскольку вам не нужно представлять пустые ячейки снова и снова. Если только вы не переживаете из-за серьезных проблем с масштабированием, я бы выбрал 1-й вариант.

...