Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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 是否在某个特定时间点查看文档?(dup,版本控制?)_Ruby On Rails_Ruby On Rails 3_Mongodb_Mongoid - Fatal编程技术网

Ruby on rails 是否在某个特定时间点查看文档?(dup,版本控制?)

Ruby on rails 是否在某个特定时间点查看文档?(dup,版本控制?),ruby-on-rails,ruby-on-rails-3,mongodb,mongoid,Ruby On Rails,Ruby On Rails 3,Mongodb,Mongoid,Mongoid-2.4.7 我需要在特定时间点存储文档的副本 我会知道确切的时间点 它们将手动发生(定义为到期日) 并且在文档的生命周期内只会发生一次或两次 最好的方法是什么 单独的模型-创建单独的ExpiredAnswery模型,并在记录“过期”时复制记录?这感觉有点恶心,尤其是考虑到父级有嵌入式文档,而父级也有嵌入式文档 版本控制-内置的Mongoid版本控制可以工作,但我不需要每次更新都存储版本,只需要在1或2个特定时间点存储。所以我需要能够手动设置 (此外,这个父文档实际上是嵌入的;

Mongoid-2.4.7

我需要在特定时间点存储文档的副本

  • 我会知道确切的时间点
  • 它们将手动发生(定义为到期日)
  • 并且在文档的生命周期内只会发生一次或两次
最好的方法是什么

单独的模型-创建单独的ExpiredAnswery模型,并在记录“过期”时复制记录?这感觉有点恶心,尤其是考虑到父级有嵌入式文档,而父级也有嵌入式文档

版本控制-内置的Mongoid版本控制可以工作,但我不需要每次更新都存储版本,只需要在1或2个特定时间点存储。所以我需要能够手动设置

(此外,这个父文档实际上是嵌入的;但是,这可能会改变,因为我知道Mongoid::版本控制不适用于嵌入的文档。)


那么,在特定时间点查看文档(及其嵌入文档)的最佳方式是什么呢?

您必须手动执行此操作。我会在父文档中创建另一个名为previor\u version或snapshot\u version的密钥,并将副本存储在那里

您需要测试mongoid如何处理该分配,并可能执行手动深度复制,因为您有许多嵌入式字段/文档


我认为单独的模型是多余的,版本控制不适用于此应用程序(正如您所说,您只需要一个副本)

来自Mongoid文档关于版本控制的内容:

通过将持久性调用包装在无版本块中,可以在任何时间点跳过版本控制

这有点麻烦,但您可以使用if语句,在需要时从版本控制切换到无版本控制。也就是说,大多数情况下都是无版本保存,但当设置标志时,if语句会切换到版本化保存

person.versionless do |doc|
  doc.update_attributes(name: "Theodore")
end