【发布时间】:2013-01-23 16:16:18
【问题描述】:
问题
我有一个带有授权和身份验证逻辑的用户模型。
现在我意识到我拥有三种不同类型的用户。我想存储关于他们每个人的不同信息。
在 Rails 中处理这个问题的最佳方法是什么?
基于当前阅读的想法
我查看了 STI,但从我读到的内容来看,这不合适,因为我的数据库中会出现很多 NULL 字段。
理想情况下,我不想为这三种用户类型中的每一种重复身份验证/授权逻辑。
每个用户在应用程序中也将拥有不同的功能。
【问题讨论】:
-
你应该在你的模型/数据库中添加一个 user_type 属性,然后设置一个模型来映射 user_types 和他们被允许使用的活动/功能。
-
但这仍然意味着我有一个用户表,对吧?因此,如果我想为一个用户(A 类)存储姓名和电子邮件,为另一个用户(B 类)存储姓名、电子邮件、地址、dob、电话,我创建的每个 A 类用户仍然有很多空字段。
-
您应该设置一个通用字段。在 Rails 中,这就是 Active Record 中的序列化/反序列化功能派上用场的地方。有更好的数据结构可以使用,比如数组等……但为了方便起见,我们就用这个吧。在 models/user.rb 中设置一个文本字段并将自定义/变量选项存储在单个字段中。称它为 user_profile。该列的一条记录可能看起来像“dob: 031388\nphone:8312229999\nemail:user@hotmail.com”.....然后您只需通过“\n”字符拆分/加入字段
-
然后您可以使用活动记录回调和控制器(尽管我确信在控制器中这样做会违反 Rails 最佳实践)在上传之前调整表单字段中的数据。 ...然后为了显示数据,您可以轻松地将其拆分并写在单独的 div 中
标签: ruby-on-rails database-design model single-table-inheritance