你如何追踪历史和与Mongoid的活动?

时间:2011-08-30 10:01:44

标签: ruby-on-rails mongodb mongoid

我正在构建一个使用MongoDB作为后端的Rails应用程序,使用Mongoid作为ODM。我发现它非常有用,但我正在寻找一种跟踪以下内容的好方法:

  • 更新对象(Mike将价格从50改为75)
  • 创建对象(Dan在Mike的帖子中添加了评论)
  • 基本统计(Mike的帖子被浏览了10次,编辑了3次)

有关库的任何建议吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

您有几种选择。以下是一些需要注意的事项:

  • 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_saveafter_updatearound_update等。

每次我转换订单的状态时,我都会得到一个新的带时间戳的记录,记录每次转换的历史记录。我已经留下了很多实施细节,但到目前为止它对我来说还不错。

链接:

答案 1 :(得分:0)

尝试mongoid-history和trackoid gems。第一个允许您跟踪更改,后者允许您跟踪活动。

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

https://github.com/twoixter/trackoid

答案 2 :(得分:0)

只需使用公共活动gem。它支持rails 3和4以及mongoid嵌入式文档