2011-03-09 37 views
1

在mongoid和軌道3我的用戶集合和集合的項目其中嵌入許多關係,該機型有:嵌入式參考不保存

類用戶
包括Mongoid ::文檔
字段:名稱,:type =>字符串
referenced_in:關係,:inverse_of =>:用戶
結束

類項目
包括Mongoid ::文獻
字段:標題,:類型=>字符串
embeds_many:關係

類關係
包括Mongoid ::文獻
字段: type,:type => String
references_one:user
embedded_in:subject,:inverse_of =>:relationsh IPS
結束

我的問題是一個關係引用的用戶永遠不會保存到關係。例如,對於下面的命令不僅節省:類型

PROJECT1 = Project.new(:標題=> 「PROJECT1」:關係=> [{:類型=> 「主」,:用戶=> 「4d779568bcd7ac0899000002」}])

我的目標是有一個類似的項目文件:

{ 「_id」:物件( 「4d77a8b2bcd7ac08da00000f」), 「頭銜」: 「PROJECT1」 「關係」:[
{
「類型」: 「主站」,
「用戶」:的ObjectId( 「4d775effbcd7ac05a8000002」),
「_id」:的ObjectId( 「4d77a8b2bcd7ac08da000010」)
}
]}

:用戶永遠不存在,我在這裏錯過了什麼?非常感謝你的幫助!

特德

+0

你使用哪個版本的mongoid? – 2011-03-14 16:25:45

+0

我有這個問題與mongoid 2.0.0 – rkabir 2011-03-31 17:45:44

+0

也許你現在已經解決了它,但嘗試從用戶刪除'referenced_in:relationship'並更改'references_one:用戶'關係到'referenced_in:user' – rubish 2011-04-07 19:52:14

回答

0

所以,你可能要改變幾件事情:

1)避免字段名「類型」,因爲這是由單個表繼承使用的軌道魔法列名。也許可以將它們更改爲user_type和relationship_type。

2)使用Mongoid 2.0及更高版本,您可以使用Active_Monitor模式語法,如has_many和belongs_to而不是引用。http://mongoid.org/docs/relations/referenced/1-n.html

3)對於您的創建,請不要使用用戶ID分配用戶,而是嘗試分配用戶對象。

project1 = Project.new(:title => "project1", :relationships => [ {:type => "master", :user => User.first} ]) 

或者你可以指定一個USER_ID像這樣:

project1 = Project.new(:title => "project1", :relationships => [ {:type => "master", :user_id => "the_use_id_you_want_to_associate"} ]) 

僅供參考,您不必指定在inverse_of 「referenced_in:關係:inverse_of =>:用戶」。只是「referenced_in:關係」將會訣竅。