2013-04-21 47 views
1

我正在創建描述一個人的配置文件。本說明中包含有關他們在哪些工作環境下(即「計算機& IT」)的什麼工業的信息。因此,關係如此定義的:Mongoid:如何反轉1-N關係,並將外鍵存儲在父項上?

"A Profile has an Industry, but an Industry does not belong to a Profile."

翻翻this Mongoid documentation,我建立了我的模型有以下:

class Profile 
    include Mongoid::Document 

    has_one :industry 
end 

class Industry 
    include Mongoid::Document 

    field :name,  type: String, default: '' 
end 

現在我通常知道你想補充belongs_to :profile產業班。然而,根據該文件,它增加了外鍵子(工業),而不是父(配置文件):

# The parent profile document. 
{ "_id" : ObjectId("4d3ed089fb60ab534684b7e9") } 

# The child industry document. 
{ 
    "_id" : ObjectId("4d3ed089fb60ab534684b7f1"), 
    "profile_id" : ObjectId("4d3ed089fb60ab534684b7e9") 
} 

這是問題,因爲我不希望一個行業鏈接到個人資料,我希望配置文件鏈接到行業。 我如何使它看起來像這樣?

# The parent profile document. 
{ "_id" : ObjectId("4d3ed089fb60ab534684b7e9") 
    "industry_id" : ObjectId("4d3ed089fb60ab534684b7f1") 
} 

# The child industry document. 
{ 
    "_id" : ObjectId("4d3ed089fb60ab534684b7f1"), 
} 
+1

也許我是誤解,但不應該'工業''has_many:profiles'和'Profile'' belongs_to:industry'? – WiredPrairie 2013-04-21 18:28:33

+0

是的,顛倒'has_one'和'belongs_to'工作。我被拋棄了,因爲從英語的角度來看,說*「一個配置文件屬於一個行業」是沒有意義的* – 2013-04-21 19:23:29

回答

0

我找到名字的選擇在Mongoid混亂的關係,但它反映的ActiveRecord所以你去。你想:

class Industry 
    has_many :profiles 
end 

class Profile 
    belongs_to :industry 
end 

該類與belongs_to有FK領域。 has_onehas_many創建關聯以在另一個類中查找FK。

+2

嘿,是的,我發佈後意識到這一點......我真的需要讓自己成爲一個橡皮鴨交談。 – 2013-04-21 19:24:40