ユーザーの現在、以前、および選択された (期間終了時の変更) サブスクリプションの状態を追跡しようとしています。
毎月の期間の終わりにchosen_subscription != current_subscription
、current_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
どうすれば正しく構築できますか?