0
class Person
  include Mongoid::Document
  field :name
  embeds_many :addresses
end

class Company
  include Mongoid::Document
  field :name
  embeds_many :addresses
end

class Address
  include Mongoid::Document
  embedded_in :addressable, inverse_of :addresses
end

私はこのようなことを試しました

company = Company.first
person = Person.first
address = Address.new

company.addresses << address
company.save
=>true

person.addresses << address
person.save
=>true

しかし、住所は個人には埋め込まれていませんでしたが、会社には埋め込まれていました。誰かが理由を知っていましたか?または、複数のドキュメントに住所を埋め込むことはできませんか。

こうやって反転しながらまた

person.addresses << address
person.save
=>true

company.addresses << address
company.save
=>true

アドレスが会社ではなく個人に埋め込まれていることがわかりました..任意のアイデア。

4

3 に答える 3

1

clone()が機能しない場合は、古い住所の属性に基づいて新しい住所レコードを作成できます。これは新しいオブジェクトになり、正常に保存されるはずです。

于 2011-03-12T10:12:55.837 に答える
0

あなたのアドレスを複製してみてください:

person.addresses << address
person.save
=>true

company.addresses << address.clone
company.save
=>true

埋め込まれていてもすべてのドキュメントは _id であるため、クローンを作成した場合、2 番目のケースでは new_record ではありません。

于 2010-08-12T12:25:09.000 に答える
0

これはあなたを助けるかもしれません、

company.addresses.new.attributes = address.attributes 
company.save

于 2013-03-01T13:05:35.930 に答える