2010-08-12 5 views
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 

J'ai essayé quelque chose comme çaIntégrer dans de nombreux documents

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

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

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

Mais je ne trouve l'adresse intégrée dans person.But je trouve qu'il a été intégré dans la société. Est-ce que quelqu'un savait pourquoi? Ou je ne peux pas intégrer l'adresse dans plusieurs documents.

Encore une fois alors que je renversé comme celui-ci

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

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

J'ai trouvé l'adresse a été intégré en personne pas en compagnie .. Toutes les idées.

Répondre

0

Essayez de cloner votre adresse:

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

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

Tous les documents sont même embarqués _id donc il ne new_record dans le deuxième cas, si vous ton clone il.

+0

Merci pour la réponse rapide. Alors que j'ai essayé Person.find (person_id) .addresses il m'a donné l'adresse. Mais il ne m'a pas donné d'adresse lors de l'essai de Company.find (company_id) .adresse après le clonage de l'objet adresse. J'étais supposé obtenir l'objet de personne et d'entreprise en faisant seulement Person.find (person_id) .addresses.first.addressable. Y a-t-il une solution? – kriysna

1

Si clone() ne fonctionne pas, vous pouvez créer un nouvel enregistrement d'adresse basé sur les attributs de l'ancienne adresse. Ce sera un nouvel objet et devrait enregistrer avec succès.

0

Cela pourrait vous aider,

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

Questions connexes