2

我對mongoDB非常陌生,我只是將它用於我正在開發的一個新的rails項目。 我現在想要做的是讓一個(嵌入式)文檔引用另一個集合,但是具有不同的角色。mongoid,創建角色引用

不知何故,這似乎並不奏效。我知道,我無法從外部集合中定義一個關係到我的嵌入關係。所以在我的情況下,我無法訪問我的用戶的位置,我很好。不過,我需要定義referenced_in :location部分,否則在嘗試向場所添加新位置時會收到錯誤消息​​。

這就是前言。我的實際問題是,這些角色的東西似乎沒有工作。當我在地點locations.create(:user_a => some_user)中創建類似的新位置時,也會爲該用戶設置user_b

有什麼辦法可以使這個工作?或者我做錯了什麼?

class Place 
    include Mongoid::Document 
    embeds_many :locations 
end 

class Location 
    include Mongoid::Document 
    embedded_in :place, :inverse_of => :locations 
    references_one :user_a, :class_name => "User" #, :stored_as => :array 
    references_one :user_b, :class_name => "User" #, :stored_as => :array 
end 

class User 
    include Mongoid::Document 
    referenced_in :location, :inverse_of => :dropper 
    referenced_in :location, :inverse_of => :picker 
end 
+0

您使用哪種mongoid版本? – shingara 2011-01-20 10:24:46

+0

sry,完全忘了:mongoid 2.0.0.beta.20 on rails 3.0.3 – Dennis 2011-01-20 10:39:02

回答

1

我認爲你必須消除歧義兩個位置的關聯(因爲引用存儲在referenced_in側):

class User 
    include Mongoid::Document 
    referenced_in :location_a, :inverse_of => :user_a, :class_name => "Location" 
    referenced_in :location_b, :inverse_of => :user_b, :class_name => "Location" 
end 

我不禁感慨,有可能是一個更好的辦法這樣做雖然...

這是一個更好的方法?

class Location 
    include Mongoid::Document 
    embedded_in :place, :inverse_of => :locations 
    referenced_in :user_a, :class_name => "User" 
    referenced_in :user_b, :class_name => "User" 
end 

class User 
    include Mongoid::Document 
end