2010-12-02 87 views
1

我有一個關於mongoid id storage for references_many的問題。Mongoid references_many ID數組人口

假設我有以下類:

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 

如果我做了以下內容:

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

我應該期望a.b_ids陣列是包含B的ID陣列?

我看到的行爲是b.a_id包含a的id,但a.b_ids不包含b的id。

A側的ID數組是否應該手動更新?

順便說一句,如果我做a.bs < < b,然後a.b_ids得到正確更新。

+0

注意`:stored_as`在2.0.0消失了,見[升級說明](http://mongoid.org/docs/upgrading.html)。 – robinst 2012-02-11 14:27:53

回答

1

要回答我自己的問題,id數組目前不會自動設置。 此功能計劃在mongoid的重構分支發佈後包含。

此信息來源於此線程:http://groups.google.com/group/mongoid/browse_thread/thread/9ac74dc9a08a5fe2/d3a7c2404b67abfa

在此之前,IDS必須手動跟蹤。

一個例子是:

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