3

ユーザーの現在、以前、および選択された (期間終了時の変更) サブスクリプションの状態を追跡しようとしています。

毎月の期間の終わりにchosen_subscription != current_subscriptioncurrent_subscriptionが変更されます。

class User
  include Mongoid::Document

  embeds_one :previous_subscription, class_name: "Subscription"
  embeds_one :current_subscription, class_name: "Subscription"
  embeds_one :chosen_subscription, class_name: "Subscription"
end

class Subscription
  include Mongoid::Document

  embedded_in :user

  field :plan, type: String
  field :credits, type: Integer
  field :price_per_credit, type: BigDecimal

  field :start, type: Date
  field :end, type: Date
end

Mongoid は、私には意味をなさない方法で、これをより詳細に指定することを望んでいます。

Mongoid::Errors::AmbiguousRelationship:

Problem:
  Ambiguous relations :previous_subscription, :current_subscription, :chosen_subscription defined on User.
Summary:
  When Mongoid attempts to set an inverse document of a relation in memory, it needs to know which relation it belongs to. When setting :user, Mongoid looked on the class Subscription for a matching relation, but multiples were found that could potentially match: :previous_subscription, :current_subscription, :chosen_subscription.
Resolution:
  On the :user relation on Subscription you must add an :inverse_of option to specify the exact relationship on User that is the opposite of :user.

これは、既存の current_subscription を上書きしたときに発生します。この時点で、Mongoid は古いサブスクリプションのユーザーのサブスクリプションを登録解除したいと考えています。

もちろん、すべてのサブスクリプション オブジェクトは 1 人のユーザーにのみ属し、user == user.previous_subscription.user == user.current_subscription.user == user.chosen_subscription.user

しかし、それが3 つのいずれかの逆であるとSubscription言うのは、私には意味がありません。user

どうすれば正しく構築できますか?

4

2 に答える 2