我用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)