1

埋め込みモデルをクエリすると、埋め込みモデルのインスタンスを含む親レコードがたくさんあるにもかかわらず、レコードが返されません。

Labelに組み込まれた2 つのモデルがありますBand

class Band
  include Mongoid::Document
  embeds_one :label
end

class Label
  include Mongoid::Document
  field :name, type: String
  embedded_in :band
end

Band ( など) を問題なくクエリできますがBand.allBand.findLabel をクエリしても何も返されません。例えば:

ラベルが埋め込まれたバンドを作成し、保存します。

 > b = Band.create
 => #<Band _id: 516cff525543d8842e000008, _type: nil>
 > b.build_label name: "new label"
 => #<Label _id: 516cff5a5543d8842e000009, _type: nil, name: "new label">
 > b.save
 => true

次に、Band モデルにクエリを実行すると、すべて問題ありません。

 > Band.all.to_a
 => [#<Band _id: 516cff525543d8842e000008, _type: nil>]
 > Band.count
 => 1
 > Band.first.label
 => #<Label _id: 516cff5a5543d8842e000009, _type: nil, name: "new label">
 > Band.find "516cff525543d8842e000008"
 => #<Band _id: 516cff525543d8842e000008, _type: nil>

しかし、Label モデルにクエリを実行しても、何も表示されません!

 > Label.all.to_a
 => []
 > Label.count
 => 0
 > Label.last
 => nil
 > Label.first
 => nil
 > Label.find "516cff5a5543d8842e000009" # this is the label id from Band
 => nil

私は、これが意図された動作ではないことをほぼ確信しています。このコードは、Mongoid ドキュメントの例から直接引用したものです: http://mongoid.org/en/mongoid/docs/relations.html#embeds_one

私は何が欠けていますか?

4

2 に答える 2

0

Label.countのように好きなようにクエリを実行できるようにするには、has_many、has_one、belongs_toメソッドを使用する必要があると思います。

ドキュメントを別のドキュメントに埋め込むと、ドキュメントの一部 (シリアル化されたプロパティ) になります。ラベルを選択する場合は、最初に Band を見つけてから、ラベル プロパティを確認する必要があります。それは間違いなくうまくいくはずです。

于 2013-04-16T07:55:01.050 に答える