2012-05-08 38 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

好的。我会先尝试。 –

相关问题