8

投稿モデルにviewer_idsを入れてuser_idsを保存し、ユーザーモデルのviewed_idsを表示されたpost_idsに入れようとしています。Rspecを使用してテストし、ユーザーからリレーションを追加/削除してアクセスする場合は、うまく機能します。しかし、RABLを使用して投稿を表示すると(ユーザーデータが埋め込まれている間)、混乱してあいまいな関係になります。

#Post class
belongs_to :user
has_and_belongs_to_many :viewers, class_name: 'User', inverse_of: :viewed  

#User class
has_many :users
has_and_belongs_to_many :viewed, class_name: 'Post', inverse_of: :viewers

Mongoid :: Errors :: AmbiguousRelationship in Posts#show

Problem:
Ambiguous relations :posts, :viewed 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 Post for a matching relation, but multiples were found that could potentially match: :posts, :viewed.
Resolution:
On the :user relation on Post you must add an :inverse_of option to specify the exact relationship on User that is the opposite of :user.

だから問題は何ですか、私は関係とそれらの逆の両方を定義しています。関係の逆で異なるデータを持つことはできませんか?

4

1 に答える 1

7

問題は、モデル上に同じクラスの複数の関係がある場合でした。したがって、nnが追加されると、両側に2つのユーザーリレーションと2つのポストリレーションがありました。

#Post class
belongs_to :user, inverse_of: :posts
has_and_belongs_to_many :viewers, class_name: 'User', inverse_of: :viewed  

#User class
has_many :posts, inverse_of: :user
has_and_belongs_to_many :viewed, class_name: 'Post', inverse_of: :viewers

これをクリアしてくれたDuranに感謝しますhttps://jira.mongodb.org/browse/MONGOID-2923?focusedCommentId=982950&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-982950

于 2013-03-23T12:04:09.140 に答える