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

Ruby on rails Rails-可以有两个不同子项的模型,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个标准的Desive用户模型和常用字段 这是针对一种情况,即人们要么正在寻找一个住宿的地方,要么他们有一个住宿的地方。所以我有两类用户,一个人可以是。这两个类别非常不同(即,寻找住宿地点的人与有住宿地点的人有非常不同的字段) 因此,用户必须: User: name, email, password, profile_id 用户还可以拥有个人资料(即,他们正在寻找房子) 这就是我目前所拥有的。现在我需要稍微改变一下,这样用户就可以有个人资料或。。。他们可以有房子(即,他们有房子并且正在寻找

我有一个标准的Desive用户模型和常用字段

这是针对一种情况,即人们要么正在寻找一个住宿的地方,要么他们有一个住宿的地方。所以我有两类用户,一个人可以是。这两个类别非常不同(即,寻找住宿地点的人与有住宿地点的人有非常不同的字段)

因此,用户必须:

User: name, email, password, profile_id
用户还可以拥有个人资料(即,他们正在寻找房子)

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


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

我发现,一般来说,如果多态关联所建模的对象甚至略有不同,那么随着时间的推移,多态关联不会很好地工作。对于你的情况,我建议把这两个物体分开

一般来说,最好的方法是考虑你想要检索数据的方式。例如,我可以想象您想要访问这两个:

@user.house

因此,我建议首先在
用户
表和
配置文件
房屋
表之间建立关系(可以是可选的)。我还将添加一个
type
字段,用于确定用户是这两种类型中的哪一种

这允许用户属于任一类型,并允许他们同时拥有
个人资料
房屋


因此,房屋和配置文件
都属于
用户,而用户
有许多
(或
有一个
)房屋和配置文件

我发现,一般来说,随着时间的推移,如果他们建模的对象甚至稍有不同,多态关系就不会很好地工作。对于你的情况,我建议把这两个物体分开

一般来说,最好的方法是考虑你想要检索数据的方式。例如,我可以想象您想要访问这两个:

@user.house

因此,我建议首先在
用户
表和
配置文件
房屋
表之间建立关系(可以是可选的)。我还将添加一个
type
字段,用于确定用户是这两种类型中的哪一种

这允许用户属于任一类型,并允许他们同时拥有
个人资料
房屋


因此,房屋和配置文件
都属于
用户,而且用户
有许多
(或
有一个
)房屋和配置文件

是的,我觉得多态性在这里并不合适。我对Rails还是很陌生。如果我在用户和profiles(和house)表之间有关系,那么我肯定必须检查我需要的任何地方。例如,即使使用类型字段,我也必须检查用户是否有房屋或配置文件,然后才能获取?这不是一件坏事吗?似乎有点。。。尴尬,我还不担心那些细节。您可以使用作用域或其他属性在需要时获取所需的模型。好的,完成了。所以我可以创建一个拥有房子的用户,并通过User.house访问,或者我可以转到house.User。酷。但同一个用户可能有一个配置文件。现在有没有办法强制执行该约束?用户不应具有配置文件。这没什么大不了的,但会很好的。当然。老实说,我建议接受这个答案,并发布一个新问题,询问如何强制执行约束——发布现有的最新代码。然后你就可以得到我的想法和其他关于这部分工作的想法。好主意。谢谢你的帮助是的,我觉得多态性在这里不太合适。我对Rails还是很陌生。如果我在用户和profiles(和house)表之间有关系,那么我肯定必须检查我需要的任何地方。例如,即使使用类型字段,我也必须检查用户是否有房屋或配置文件,然后才能获取?这不是一件坏事吗?似乎有点。。。尴尬,我还不担心那些细节。您可以使用作用域或其他属性在需要时获取所需的模型。好的,完成了。所以我可以创建一个拥有房子的用户,并通过User.house访问,或者我可以转到house.User。酷。但同一个用户可能有一个配置文件。现在有没有办法强制执行该约束?用户不应具有配置文件。这没什么大不了的,但会很好的。当然。老实说,我建议接受这个答案,并发布一个新问题,询问如何强制执行约束——发布现有的最新代码。然后你就可以得到我的想法和其他关于这部分工作的想法。好主意。谢谢你的帮助
@user.house
@user.profile