我正在使用Mongoid :: Versioning,除了我想防止多个字段被版本化之外,它的效果很好。
在文档中没有很多关于它的信息,所以我不知道该怎么做。
http://mongoid.org/docs/extras.html
class Person
include Mongoid::Document
include Mongoid::Versioning
# keep at most 5 versions of a record
max_versions 5
end
它们展示了如何完全跳过某个版本,而不是如何限制某些字段的版本化。
有什么想法吗?
更新
我发现这样的东西正在挖掘代码,但我不确定如何使用它。
https://github.com/mongoid/mongoid/blob/master/lib/mongoid/versioning.rb#L90
答案 0 :(得分:4)
默认情况下,所有字段都有选项:versioned
如果您不想要此版本,则可以传递false。例如,我想要名称版本但没有登录
class User
include Mongoid::Document
include Mongoid::Versioning
field :name, :type => String
field :login, :type => String, :versioned => false
end
您也可以在嵌入关联中传递:versioned
选项。
您可以通过迭代文档上的.fields
来覆盖此选项。
因此,在您的代码中,您可以通过创建一个小方法来添加避免在某些字段上进行版本化:
class User
include Mongoid::Document
include Mongoid::Versioning
include Mongoid::Voteable
field :name, :type => String
field :login, :type => String
def self.avoid_versioned(*unversioned_fields)
unversioned_fields.each do |f|
fe = self.fields[f.to_s]
fe.options[:versioned] = false if fe
re = self.relations[f.to_s]
re[:versioned] = false if re
end
end
avoid_versioned( :login, :votes )
end
答案 1 :(得分:2)
你可能会找到一种方法来做到这一点,但我建议你去看看这个宝石。
https://github.com/aq1018/mongoid-history
track_history :on => [:title, :body], # I want to track title and body fields only. Default is :all
:modifier_field => :modifier, # Adds "referened_in :modifier" to track who made the change. Default is :modifier
:version_field => :version, # Adds "field :version, :type => Integer" to track current version. Default is :version
:track_create => false, # Do you want to track document creation? Default is false
:track_update => true, # Do you want to track document updates? Default is true
:track_destroy => false, # Do you want to track document destruction? Default is false
答案 2 :(得分:0)
您可以通过将持久性调用包装在无版本的块中来随时跳过版本控制。
class Person
include Mongoid::Document
include Mongoid::Versioning
end
person.versionless do |doc|
doc.update_attributes(name: "Theodore")
end