Как вы отслеживаете историю и деятельность с Mongoid? - PullRequest
2 голосов
/ 30 августа 2011

Я создаю приложение Rails, которое использует MongoDB в качестве бэкэнда, с Mongoid в качестве ODM. Я нашел это очень полезным, но я ищу хороший способ отслеживать следующее:

  • Обновление объектов (Майк изменил цену с 50 на 75)
  • Создание объектов (Дэн добавил комментарий к записи Майка)
  • Основная статистика (пост Майка был просмотрен 10 раз и отредактирован 3 раза)

Какие-либо рекомендации для библиотек?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 06 февраля 2012

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

https://github.com/aq1018/mongoid-history

https://github.com/twoixter/trackoid

0 голосов
/ 04 апреля 2014

просто используйте драгоценный камень публичной активности. Он поддерживает рельсы 3 и 4 и документы, вставленные в mongoid

0 голосов
/ 31 августа 2011

У вас есть несколько вариантов. Вот пара вещей, о которых нужно помнить:

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

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

class Order
  include Mongoid::Document
  include Mongoid::Paranoia
  include Mongoid::Timestamps
  embeds_many :notes, as: :notable
  # fields
end

class Note
  include Mongoid::Document
  include Mongoid::Timestamps

  field :message
  field :state
  field :author

  #(I can add notes to any Model through :notable)
  embedded_in :notable, polymorphic: true 
end

Затем я создал наблюдателя для отслеживания изменений состояния в Порядке:

class OrderObserver < Mongoid::Observer
  def after_transition(order, transition)
    order.notes.build(state: transition.to)
  end
end

after_transition - это обратный вызов, который предоставляет плагин конечного автомата. Если вам не нужна интеграция конечного автомата, вы можете просто использовать предоставляемые Mongoid обратные вызовы, такие как after_save, after_update, around_update и т. Д.

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

Ссылки:

...