1

次の3つのモデルがあります。

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 で何かが変更された場合 (例: name、min、max、または type )、新しいバージョンが作成されます。ただし、ItemAttributeValue が更新、削除、または追加された場合、新しい ItemAttribute は作成されません。これが必要です。たとえば、誰かが ItemAttributeValue { name: 'CRT', order: 3 } を「スクリーン タイプ」に追加した場合、「スクリーン タイプ」ItemAttribute は新しいバージョンを取得する必要があります。バージョン 1 には「LCD」、「LED」、「プラズマ」があり、バージョン 2 には「LCD」、「LED」、「プラズマ」、「CRT」があります。また、誰かが ItemAttributeValue を削除すると、さらに別のバージョンが作成されます。

以前は、ItemAttribute は ItemGroup に埋め込まれていなかったので、Mongoid::Versioning を使用することができました。それはまさに望みどおりに機能しました。しかし、ItemGroup 内に ItemAttribute を埋め込むことが決定され、Mongoid::Versioning を使用できなくなったため、Mongoid::History::Tracks に切り替えました。これは、モデル内の変更の追跡には問題なく機能しますが、モデルに埋め込まれたドキュメントが更新されたときは追跡されません。

モデルに埋め込まれたドキュメントの更新を追跡するように宝石に指示するオプションまたは何かを追加する機能を追加するには、mongoid_history をフォークする必要があると考え始めています。

前にこのような状況に遭遇した人はいますか?

4

1 に答える 1

1

私の問題を解決する宝石、mongoid-deloreanを見つけました。

于 2013-02-25T06:06:38.243 に答える