Создание панели инструментов в Rails - PullRequest
5 голосов
/ 26 февраля 2010

Допустим, у меня было приложение, которое было адресной книгой. Я хотел бы иметь страницу, посвященную "приборной панели". На этой странице я хотел бы иметь список текущих событий, происходящих внутри самого приложения.

Примеры событий могут быть:

  1. Пользователь добавляет контакт.
  2. Пользователь удаляет контакт.
  3. Пользователь обновляет контакт.

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

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

Я мог бы пройтись по всему своему приложению, и каждый раз, когда выполнялась операция CRUD, я мог создавать новый элемент в таблице с подробным описанием того, что произошло, но это не выглядит очень СУХОЙ.

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

Любое руководство будет с благодарностью.

Ответы [ 5 ]

6 голосов
/ 26 февраля 2010

Самый простой способ сделать это для пользователя Наблюдатели в дополнение к таблице "logger" в вашей базе данных.

Logger
  id
  model_name
  model_id
  message

Таким образом, вы можете настроить Observer для всех моделей, которые вы хотите зарегистрировать, и сделать что-то вроде этого:

after_delete(contact)
  Logger.create({:model_name => contact.class.to_s,
                 :model_id => contact.id,
                 :message => "Contact was deleted at #{Time.now}"})
end

Теперь вы можете регистрировать любое событие так, как считаете нужным. Еще одним замечательным дополнением к такой структуре является реализация «Логических удалений», что означает, что вы никогда не действительно удаляете запись из таблицы, вы просто присваиваете ей флаг, чтобы она больше не отображалась в обычном результате наборы. Есть плагин, который делает это под названием acts_as_paranoid .

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

2 голосов
/ 26 февраля 2010

Вы можете проверить Временную шкалу Фу: http://github.com/jamesgolick/timeline_fu:

class Post < ActiveRecord::Base
  belongs_to :author, :class_name => 'Person'
  fires :new_post, :on    => :create,
                 :actor => :author
end
1 голос
/ 26 февраля 2010

В прошлом я создавал аналогичные функции, используя acts_as_audited .

Это помогает вам отслеживать изменения в ваших моделях, которые вы затем можете представить пользователю.

Как вы и предлагали, он просто отслеживает события в отдельной таблице.

1 голос
/ 26 февраля 2010

Вы можете использовать Наблюдатели для обработки событий.

Затем просто сохраните событие с информацией, необходимой в базе данных от этих наблюдателей.

Вот быстрая ссылка , чтобы начать работу.

0 голосов
/ 02 сентября 2011

пользовательский плагин paper_trail, это потрясающе!Мы изменили его, хотя, он используется для всей нашей системы аудита для сложного процесса выпуска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...