2010-08-12 3 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 

Я пытался что-то вроде этогоКод во многих документах

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

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

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

Но я не нашел адрес встраивается в person.But я обнаружил, что он был встраивается в компании. Кто-нибудь знал почему? Или Не могу встроить адрес в несколько документов.

Снова в то время как я отменил, как этот

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

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

Я нашел адрес заливали в лицо не в компании .. Любые идеи.

ответ

0

Попытка клонировать ваш адрес:

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

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

Все документы даже встроенные являются _ID поэтому он не new_record во втором случае, если вы тонный клон его.

+0

Спасибо за быстрый ответ. Пока я пробовал Person.find (person_id) .addresses, он дал мне адрес. Но это не дало мне адреса при попытке отправить Company.find (company_id) .addresses после клонирования объекта адреса. Я должен был получить объект person и company, когда делал только Person.find (person_id) .addresses.first.addressable. Есть ли какое-нибудь решение? – kriysna

1

Если clone() не работает, вы можете создать новую запись адреса на основе атрибутов старого адреса. Это будет новый объект и должен успешно сэкономить.

0

Это может помочь вам,

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

Смежные вопросы