Ruby on rails 维护新型用户Rails

Ruby on rails 维护新型用户Rails,ruby-on-rails,Ruby On Rails,目前,在我的rails应用程序中,我使用Desive生成包含电子邮件和密码的“用户”模型。此模型与另一个模型“profileAboutuser”具有一对一的关系,该模型具有关于用户名、地址等用户的描述。每当新用户注册时,都会创建相应的表 has_one :profile_user, dependent: :destroy after_create :build_profile_user 我的应用程序还需要另一种用户“专家”。“专家”是回答任何用户查询的用户。“专家”只能由开发者、管理员批准

目前,在我的rails应用程序中,我使用Desive生成包含电子邮件和密码的“用户”模型。此模型与另一个模型“profileAboutuser”具有一对一的关系,该模型具有关于用户名、地址等用户的描述。每当新用户注册时,都会创建相应的表

 has_one :profile_user, dependent: :destroy
 after_create :build_profile_user
我的应用程序还需要另一种用户“专家”。“专家”是回答任何用户查询的用户。“专家”只能由开发者、管理员批准才能创建。典型用户不能是“专家”。让专家模型成为描述各种专家信息的“profileExpert”

如何维护“专家”

我是否为“theExpert”创建了一个新的Desive模型,尽管这意味着创建一个单独的登录表单是不可取的

或者我应该向profileUser“is_expert”添加新的布尔字段,该字段默认设置为false。开发人员admin可以在需要时将该值设置为true

或者我应该更改现有代码以支持多态关联。用户可以是专家,也可以是典型用户

编辑-
我是否需要在用户是专家还是典型之间进行选择。我是否可以在需要时向典型用户添加额外的profileExpert连接

最好实现单表继承

签出以下链接以了解如何实现单表继承


如果每个表上都有太多的唯一字段,那么不要实现STI。创建一个单独的模型。

我认为您应该使用STI(单表继承)。因此,您无需为专家用户创建新模型

 class User < ActiveRecord::Base
 end

 class Expert < User
 end
class用户
所以,当您执行Expert.create时,它会自动将用户中的type列设置为Expert

将来,如果您想添加任何新类型的用户,只需继承与专家相同的用户即可


但是,如果两个表中都有唯一字段,则不要使用STI。在这种情况下,最好创建新模型。

我了解到,当两个模型都有许多唯一字段时,单表插入不合适,这是正确的。无论如何,用户(专家和配置文件用户)都将拥有公共用户属性,对吗?专家将需要所有用户属性,但需要自己的许多额外属性,然后创建一个单独的模型。签出我的更新答案你也可以有一个通用的登录名。您必须编写一个控制器来处理所有类型的登录