2012-06-19 41 views
5

我在軌道公司模式下面的代碼has_and_belongs_to_many關係工作:如何在mongoid

class Company 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    field :name,  type: String 
    ... 
    has_and_belongs_to_many :users 
end 

用戶模式:

class User 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    include ActiveModel::SecurePassword 

    field :email,   type: String 
    ... 
    has_and_belongs_to_many :companies 
end 

有一個在數據庫中的公司記錄,和用戶記錄和它們相關聯。出於某種原因,下面的代碼無法正常工作:

c = Company.first 
c.users # returns empty array 

同樣,followign代碼不起作用:

u = User.first 
u.companies 

但下面的代碼做的工作:

c = Company.first 
user = User.find c.user_ids.first 

和以下代碼也適用:

u = User.first 
company = Company.find u.company_ids.first 

因此,如果我嘗試從company.users訪問用戶,它不起作用,但user_ids數組確實具有用戶id的列表,並且當我嘗試從此列表訪問用戶時,它可以正常工作。我該如何解決這個問題?

我使用的鐵軌3.2.5和mongoid 3.0.0.rc

+0

我注意到,當通過'user.companies << company'創建關聯時,我得到了'user.companies',但'company.users'工作方式不同,返回一個查詢。我可以通過調用'company.users.all.to_a'來看到該數組。在此之後,我稱之爲「company.users << user2」,這看起來似乎與這些協會混爲一談。 – Baruch

+0

演出很晚。此解決方法爲我做了:http://stackoverflow.com/questions/7308539/mongoid-has-and-belongs-to-many-associations/36282420#36282420 –

回答

2

我有完全一樣的問題;) 確保您使用的MongoDB版本> 2.0.0,詳細內容見:http://mongoid.org/en/mongoid/docs/installation.html#installation

+0

是的,我只是做了一個sudo apt-get install mongodb- 10gen重新安裝mongodb,(我認爲我早在6個月前就已經從源頭上獲得了它),並在此之後開始工作。 – umar

+0

這不適合我 –