Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 你如何追踪历史和未来;Mongoid的活动?_Ruby On Rails_Mongodb_Mongoid - Fatal编程技术网

Ruby on rails 你如何追踪历史和未来;Mongoid的活动?

Ruby on rails 你如何追踪历史和未来;Mongoid的活动?,ruby-on-rails,mongodb,mongoid,Ruby On Rails,Mongodb,Mongoid,我正在构建一个Rails应用程序,它使用MongoDB作为后端,Mongoid作为ODM。我发现它非常有用,但我正在寻找一种跟踪以下内容的好方法: 更新对象(Mike将价格从50更改为75) 创建对象(Dan在Mike的帖子中添加了一条评论) 基本统计数据(迈克的帖子被浏览了10次,编辑了3次) 对图书馆有什么建议吗 谢谢 您有几种选择。这里有几件事需要记住: Mongoid有一个版本控制插件,您可以在其中跟踪文档的版本 可以创建嵌入文档来存储模型上的注释/更改。当某些事情发生时,使用观察

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

  • 更新对象(Mike将价格从50更改为75)
  • 创建对象(Dan在Mike的帖子中添加了一条评论)
  • 基本统计数据(迈克的帖子被浏览了10次,编辑了3次)
对图书馆有什么建议吗


谢谢

您有几种选择。这里有几件事需要记住:

  • 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
类OrderObserver
after_transition
是状态机插件提供的回调。如果您不关心如何集成状态机,那么可以使用Mongoid提供的回调,如保存后的
、更新后的
、更新前后的

每次我通过订单的状态进行转换时,我都会得到一个新的时间戳注释,记录每个转换的历史。我遗漏了很多实现细节,但到目前为止它对我来说运行良好

链接:

  • -Mongoid为观察者提供了哪些回调

试试mongoid历史和trackoid宝石。前者允许您跟踪更改,后者允许您跟踪活动


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