Rails - 可以有两个不同子项的模型

时间:2012-05-08 03:14:46

标签: ruby-on-rails activerecord

我有一个标准的设计用户模型和通常的字段。

这适用于人们要么寻找住宿地点,要么他们有住宿地点的情况。所以我有两个类别的用户,一个人可以。这两个类别非常不同(即,寻找住宿地点的人与有住处的人有不同的领域。)

所以用户有:

User: name, email, password, profile_id

用户也可以拥有个人资料(即他们正在寻找房屋)。

Profile: age, sexuality, religion, occupation

这就是我现在所拥有的。现在我需要稍微改变一下,因此用户可以拥有个人资料或......他们可以拥有一个房子(即他们有房子并且正在寻找更多人):

House: price_per_week, address, etc

如何在ActiveRecord中对此进行建模?某种多态关联?

1 个答案:

答案 0 :(得分:1)

我发现一般来说,如果他们建模的对象甚至有些不同,那么多态关系在一段时间内效果不佳。对于你的情况,我建议将这两个对象分开。

通常,最好的方法是考虑您想要检索数据的方式。例如,我想你想要同时访问:

@user.house

@user.profile

所以我建议首先在users表和两者 profileshouses表之间设置关系(可以是可选的)。我还添加了一个type字段,可用于确定用户的两种类型中的哪一种。

这允许用户属于 类型,并允许他们同时拥有profilehouse

因此,所有用户和个人资料belong_to用户以及用户have_many(或have_one)所在地和个人资料