2010-12-02 4 views
1

J'ai une question concernant le stockage mongoid id pour references_many.Mongoid references_many ids tableau population

Supposons que je les classes suivantes:

class A 
    include Mongoid::Document 
    field :name 

    attr_accessible :name, :b_ids 
    references_many :bs, :stored_as :array, :inverse_of :a 
end 

class B 
    include Mongoid::Document 
    field :name 

    attr_accessible :name, :a_id 
    referenced_in :a 
end 

Si je fais ce qui suit:

a = A.create(:name => "a1") 
b = B.create(:name => "b1") 
b.a = a 

Dois-je attendre le tableau a.b_ids être un tableau qui contient l'identifiant de b?

Le comportement que je vois est que b.a_id contient l'identifiant de a, mais a.b_ids ne contient pas l'identifiant de b.

Le tableau id sur le côté A est-il censé être mis à jour manuellement?

BTW, si je le fais a.bs < < b, alors a.b_ids est mis à jour correctement.

+0

Notez que ': stored_as' est parti en 2.0.0, voir [Mise à jour des notes] (http://mongoid.org/docs/upgrading.html). – robinst

Répondre

1

Pour répondre à ma propre question, les tableaux d'id ne sont pas définis automatiquement pour le moment. Cette fonctionnalité est prévue pour être incluse une fois que la branche refactor de mongoid est libérée.

Cette information provient de ce fil: http://groups.google.com/group/mongoid/browse_thread/thread/9ac74dc9a08a5fe2/d3a7c2404b67abfa

Jusque-là, les ids doivent être suivis manuellement.

Un exemple serait:

class A 
    include Mongoid::Document 
    field :name 

    attr_accessible :name, :b_ids 
    references_many :bs, :stored_as :array, :inverse_of :a 

    def add_b b 
    bs << b 
    self.save 
    end 

    def remove_b b 
    b_ids.delete b.id 
    b.save 
    end 
end 

class B 
    include Mongoid::Document 
    field :name 

    attr_accessible :name, :a_id 
    referenced_in :a 
end 

a = A.create(:name => "a1") 
b = B.create(:name => "b1") 
b.a = a 
a.add_b b