我有以下三个模型:
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 } 添加到“Screen Types”,则“Screen Types” ItemAttribute 应该获得一个新版本。版本 1 将具有“LCD”、“LED”、“等离子”,版本 2 将具有“LCD”、“LED”、“等离子”、“CRT”。如果有人删除了 ItemAttributeValue,那将创建另一个版本。
以前,ItemAttribute 没有嵌入到 ItemGroup 中,因此我能够使用 Mongoid::Versioning,并且完全按照我的意愿工作。但是,决定将 ItemAttribute 嵌入到 ItemGroup 中,我无法再使用 Mongoid::Versioning,所以我切换到 Mongoid::History::Tracks。这适用于跟踪模型内的更改,但它不跟踪模型嵌入文档的更新时间。
我开始认为我将不得不派生 mongoid_history 以添加具有选项或告诉 gem 跟踪模型嵌入文档的更新的功能。
以前有人遇到过这样的情况吗?