我使用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
的灵活性会很高兴。
答案 0 :(得分:2)
删除中间版本的概念不正确,并破坏了版本控制的情况。如果删除中间版本,那么你永远不能确定它是故意还是腐败。
尽管如此,如果确实想要这样做,您应该将代码改为以下代码。
deleted = post.versions.first
post.versions.delete(deleted)
我不知道你为什么要这样做。如果您想确保没有太多版本并希望清理,请使用max_versions
类方法。
Post.max_versions(5)
如果您想在某些情况下避免版本控制,请使用versionless
post.versionless(&:save)