Mongoid::版本控制-删除一个版本



我用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,那就太好了。

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

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

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

我不知道你为什么要这么做。如果您想确保没有太多版本并希望清理,请使用max_versions类方法。

Post.max_versions(5)

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

post.versionless(&:save)

最新更新