【问题标题】:Mongoid::Versioning - delete one versionMongoid::Versioning - 删除一个版本
【发布时间】:2014-11-06 02:09:56
【问题描述】:

我有一个使用 Mongoid::Versioning 设置的 Rails 模型。

class Post
  include Mongoid::Document
  include Mongoid::Timestamps

  include Mongoid::Versioning

  field :name, type: String
end

我想删除特定的旧版本。例如。

post = Post.create name: 'A'
post.update_attributes name: 'B'
post.update_attributes name: 'C'
post.version #=> 3
post.versions.count #=> 2
first_version = post.versions.first #=> #<Post _id: , created_at: _, updated_at: _, version: 2, name: "B">

我想删除first_version,但是当我尝试删除它时..

first_version.delete
post.versions.count #=> 1
post.reload
post.versions.count #=> 0

..所有版本都被删除。

我尝试改用destroy,尝试在传递给post.versionless 的块内运行代码,但无济于事。我该怎么办?

更新: 我已经让它与Mongoid::Paranoia 一起工作。不过最好能灵活地不使用Mongoid::Paranoia

【问题讨论】:

  • 您应该包括您正在使用的 Mongoid 版本。 FWIW Mongoid::Versioning 已弃用,将在 4.0.0 中删除
  • Mongoid 4,但我通过 mongoid-versioning gem 使用版本控制(它带回了已删除的功能)。

标签: ruby-on-rails mongoid


【解决方案1】:

删除中间版本的概念是不正确的,并且会破坏版本控制的情况。如果您删除中间版本,那么您永远无法确定它是故意的还是某些损坏。

尽管如此,如果你真的想要这样做,你应该将代码更改为以下。

deleted = post.versions.first
post.versions.delete(deleted)

我不确定您为什么要这样做。如果你想确保自己没有太多版本并且想清理,使用max_versions类方法。

Post.max_versions(5)

如果您想在某些情况下避免版本控制,请使用versionless

post.versionless(&:save)

【讨论】:

  • 我们存储压缩附件的实际模型。用户需要能够上传这些压缩附件的多个版本,并且需要能够在旧版本弄乱模型时清理它们。我们并不关心维护渐进式差异,所以不要担心历史会因为我们删除了中间版本而被搞砸。
  • @Vighnesh 听起来您想维护一组文档并允许删除和插入。为什么需要版本?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
相关资源
最近更新 更多