2

それぞれにタグが付いているモデルがいくつかあります。たとえば、 aUserと a としPostます。どちらにもタグが埋め込まれているはずです。
ユーザーの埋め込みタグは「お気に入り」であり、投稿のタグは投稿に関係するタグです。

私は Mongoid を使用していますがTag、すべてのタグを見つけることができるモデルを作成する方法がわかりません (これらのタグは埋め込まれていません。使用可能なすべてのタグの個別のコレクションが必要です)。

ユーザーがタグを追加しようとすると、それがTag.all存在することを確認するためにチェックされます。存在する場合は、Userモデルに組み込む必要があります。

タグ モデルを複数のモデルに埋め込む方法 (UserおよびPost)、またはタグ モデルを埋め込んで通常のように取得する方法がわかりません (次のエラーが表示されます:タグのコレクションへのアクセスは許可されていないため、埋め込みドキュメントの場合は、ルート ドキュメントからコレクションにアクセスしてください。 )

アイデア?私はこれを完全に間違って設計していますか?「タグを持っているすべてのユーザーを取得する」のような複雑なクエリは必要ないのでexample、より効率的に埋め込む必要があると考えました。

4

3 に答える 3

3

さて、最初のステップは、タグを多形埋め込みにすることです。

class User
  embeds_many :tags, :as => :taggable
end

class Post
  embeds_many :tags, :as => :taggable
end

class Tag
  embedded_in :taggable, :polymorphic => true
end

その場合、使用可能なすべてのタグを含むauserまたはaのインスタンスを作成できます。postそして.all、Tagクラスを呼び出す代わりに、インスタンスで呼び出すことができます

available_user = User.new
available_user.tags << Tag.new
available_user.tags.all
于 2012-05-16T00:12:09.513 に答える
1

私の解決策は、embeds_many タグのレジストリ モデルを作成し、ユーザーまたは投稿に追加する前にチェックされる登録済みタグを持つインスタンスを作成することです。これは本質的にロンの答えと同じですが、ユーザーを過負荷にしません。

于 2012-05-16T04:20:00.313 に答える
0

まず、埋め込みタグを取得しようとしたときに発生するエラーは正常であり、実際の MongoDB バージョンでは不可能です。

私は専門家ではありませんが、実用的な解決策を提案できます。UserPostに埋め込みタグを使用し、インデックス作成に使用するTagコレクションを作成します。

  • ユーザーがタグを追加しようとしたとき: 呼び出しTag.all
    • タグが存在しない場合:ユーザータグの両方に作成します
    • もしそうなら、単にそれをUserに埋め込んでください。

同じことがPostにも当てはまります。

于 2012-05-15T21:10:15.130 に答える