Как вы отслеживаете историю и активность с Mongoid?

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

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

Любые рекомендации для использования библиотек?

Спасибо!


person Avishai    schedule 30.08.2011    source источник


Ответы (3)


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

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

https://github.com/twoixter/trackoid

person Coffee Bite    schedule 06.02.2012

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

  • У 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

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

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 и т. д.

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

Ссылки:

person JT.    schedule 31.08.2011

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

person Caner Çakmak    schedule 04.04.2014