Ruby on rails Mongoid history\u跟踪gem在嵌入文档更改时不跟踪更改

Ruby on rails Mongoid history\u跟踪gem在嵌入文档更改时不跟踪更改,ruby-on-rails,ruby,mongoid,versioning,Ruby On Rails,Ruby,Mongoid,Versioning,我有以下三种型号: class ItemGroup include Mongoid::Document embeds_many :item_attributes field :name end class ItemAttribute include Mongoid::Document include Mongoid::History::Trackable embedded_in :item_group track_history

我有以下三种型号:

class ItemGroup
    include Mongoid::Document

    embeds_many :item_attributes

    field :name
end

class ItemAttribute
    include Mongoid::Document
    include Mongoid::History::Trackable

    embedded_in :item_group

    track_history :track_create => true

    field :name
    field :min
    field :max
    field :type

    embeds_many :item_attribute_values
end

class ItemAttributeValue
    include Mongoid::Document
    include Mongoid::History::Trackable

    embedded_in :item_attribute

    track_history :on => [:name, :order], :track_create => true, :scope => :item_group_attribute, :track_delete => true

    field :name
    field :order
end
这将如何使用的示例:

item_group: {
  name: "Televisions",
  item_attributes: [
    { name: "Screen Size", min: 14, max: 90 type: "single" },
    { name: "Screen Type", min:0, max: 0, type: "multiple", item_attribute_values: [
        { name: "LCD", order: 0 },
        { name: "LED", order: 1 },
        { name: "Plasma", order: 2 }
     ]}
  ]
}
我真正关心的版本历史是ItemAttributes。现在,如果ItemAttribute(例如:名称、最小值、最大值或类型)中发生了更改,则将创建一个新版本。但是,如果更新、删除或添加了ItemAttributeValue,它将不会创建新的ItemAttribute——这正是我们想要的。例如,如果有人将ItemAttributeValue{name:'CRT',order:3}添加到“屏幕类型”中,那么“屏幕类型”ItemAttribute应该得到一个新版本。版本1将有“LCD”、“LED”、“Plasma”,版本2将有“LCD”、“LED”、“Plasma”、“CRT”。如果有人删除了ItemAttributeValue,则会创建另一个版本

以前,ItemAttribute并没有嵌入到ItemGroup中,所以我可以使用Mongoid::Versioning,这正是我想要的。但是,决定在ItemGroup中嵌入ItemAttribute,我无法再使用Mongoid::Versioning,所以我切换到Mongoid::History::Tracks。这可以很好地跟踪模型内的更改,但不能跟踪模型嵌入文档的更新时间

我开始认为,我必须分叉mongoid_history来添加一个选项,或者告诉gem跟踪嵌入文档的模型更新的功能


以前有人遇到过这样的情况吗?

找到了解决我问题的宝石,mongoid delorean。

找到了解决我问题的宝石,mongoid delorean