现在已经开始玩这个了一段时间了,并希望找到一个知道rails的人来测试我的理论(我是Rails的新手)。
在我的(简化)场景中,我想管理用户列表,其中一些是“付费”用户,一些是“免费”用户等,并且存在直接的“isa”关系。即付费用户是用户,免费用户是用户等
为了减少冗余并保持语义正确,我想管理一个表中的所有用户并使用外键回到正确的“类型”用户,这样我就可以创建一个正确类型的角色。例如我会实例化一个用户,获取id并将其存储在正确类型的用户中,例如“user_id”外键中的“PaidUser”。这使我能够存储我想要存储的特定元数据,并且我不必为每种类型的用户都有一个表(“用户”)和每个字段。
这种感觉就像是角色和用户类型的混淆。我的问题是,使用上述方法会让生活变得困难吗?我错过了Rails中是否有一种可接受的方法?我正在使用Devise并删除除/ users /之外的所有路由我认为我会传递一个“type”作为参数,并使用该类型与用户同时创建相应的“真实”类型的记录。这也是不好的做法吗?
提前致谢
答案 0 :(得分:1)
你正在做的事情听起来不错,但说实话,除非你在用户类型之间有很多这些不同的属性我会把它们全部放在同一个表中。在这里和那里有几个空白列并不是什么大不了的事,特别是当它让你不必完成一大堆困难时。如果这开始显得笨拙,那么你可以担心该怎么做 - 它仍然很容易改变。您甚至可以使用单表继承为所有不同的用户类型提供从基类User
类继承的自己的类,这是您处理所有身份验证等的地方。
如果你立即选择更复杂的东西,那么如果事情证明是错误的,那么解开起来要比简单的事情要困难得多。如果你采用多表方法,那么请确保你明智地命名。我会选择PaidUserProfile
等。