2012-05-08 41 views
1

我有一個標準的設計用戶模型,其中包含通常的字段。導軌 - 可以有兩個不同子項的模型

這是一種情況,人們要麼尋找住宿的地方,要麼他們有住宿的地方。所以我有兩個類別的用戶,一個人可以。這兩個類別是非常不同的(即尋找住宿地點的人將有一個非常不同的領域,有一個地方留下來的人)。

所以用戶有:

User: name, email, password, profile_id 

用戶也可以有一個配置文件(即他們正在找一所房子)。

Profile: age, sexuality, religion, occupation 

這就是我的時刻。現在,我需要改變咯,這樣用戶就可以有一個輪廓或...他們可以有房子(即它們有一所房子,並正在尋找更多的人):

House: price_per_week, address, etc 

如何最好地模擬這種在ActiveRecord中?多種多樣的協會的某種?

回答

1

我發現一般情況下,如果它們正在建模的對象甚至略有不同,多態關係不能很好地工作。對於你的情況,我建議保持兩個對象分開。

一般來說,最好的方法是考慮您想要檢索數據的方式。例如,我想像你想訪問兩個:

@user.house 

@user.profile 

所以我想通過users表和之間建立關係(可以選配)建議開始profileshouses表。我還要添加一個type字段,可用於確定用戶是哪種類型的用戶。

這允許用戶爲或者類型並且允許他們同時具有profilehouse

所以兩院及型材belong_to用戶,用戶have_many(或have_one)房屋及型材

+0

是的我有一種感覺多態性是不是正確的過這裏。我對Rails仍然很陌​​生。如果我在用戶和配置文件(和房屋)表之間存在關係,那麼當然我必須檢查我需要哪一個或哪一個。例如,即使使用類型字段,在獲取之前,我將不得不檢查用戶是否擁有房屋或配置文件?這不是一件壞事嗎?這似乎有點...尷尬。 –

+0

我不會擔心這些細節。您可以使用範圍或其他屬性在需要時獲取所需的模型。 –

+0

好的。我會先嚐試。 –

相關問題