Mongoid :: Versioning - 删除一个版本

时间:2014-11-06 02:09:57

标签: ruby-on-rails 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的灵活性会很高兴。

1 个答案:

答案 0 :(得分:2)

删除中间版本的概念不正确,并破坏了版本控制的情况。如果删除中间版本,那么你永远不能确定它是故意还是腐败。

尽管如此,如果确实想要这样做,您应该将代码改为以下代码。

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

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

Post.max_versions(5)

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

post.versionless(&:save)