Панель инструментов приложения View Logic - PullRequest
7 голосов
/ 25 октября 2009

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

Вот несколько идей, как это сделать, но я чувствую, что они не самые лучшие и неполные в лучшем случае.

  1. У меня есть отдельная модель, которая содержит: модель, related_id, действие. Примером может быть «Пост 1».

  2. Имеют 4 разных массива и объединяют их в правильном порядке, скажем created_at.

Как лучше всего это сделать? Я привел пример ниже:

alt text

Ответы [ 2 ]

8 голосов
/ 27 октября 2009

Возможно, вы захотите проверить плагин timeline_fu для рельсов:

https://github.com/jamesgolick/timeline_fu

3 голосов
/ 25 октября 2009

Используйте отдельную модель для хранения записей каналов, как вы предлагаете в своей первой идее. Шаблон дизайна, на который вы смотрите, называется шаблон полиморфной ассоциации

Давайте предположим, что эта новая модель называется Feed, следуя паттерну полиморфной ассоциации, вы будете использовать столбцы: feedable_type и feedable_id (в зависимости от предложенной модели имен столбцов и related_id)

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

  • Защита
  • Подписаться / Подписаться
  • Фильтрация
  • Слияние

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

Если вы когда-либо создавали приложение для Facebook, было бы очень интересно увидеть, как работает их API публикации фидов.

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

Конечно, реализация даже немного сложнее, чем эта. Как и в случае с Facebook, все каналы имеют 1 общее (они исходят от людей). Таким образом, каждая запись в фиде имеет user_id (так сказать). Поскольку мы знаем, что все каналы имеют эти данные и могут отобразить часть «кто это сделал» в новостной ленте, мы не выполняем предварительную визуализацию этой части.

Весьма полезно предварительно выполнить рендеринг как можно большего объема, который позже будет сложно построить из модели канала, но отложить предварительный рендеринг, когда мы уверены, что компонент вездесущ, и его можно заправить в нашу модель канала. 1027 *

Наконец, изучение проектов с открытым исходным кодом - хороший способ выучить

...