【问题标题】:Maintaing a new type of user, Rails维护一种新型用户,Rails
【发布时间】:2015-05-27 16:00:00
【问题描述】:

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

 has_one :profile_user, dependent: :destroy
 after_create :build_profile_user

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

我如何维护“theExpert”。

我是否要为“theExpert”创建一个新的设计模型,但这意味着创建一个单独的登录表单,这是不可取的。

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

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

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

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    最好实现单表继承。

    查看以下链接以了解如何实现单表继承。

    http://api.rubyonrails.org/classes/ActiveRecord/Inheritance.html

    如果每个表上的唯一字段过多,则不要实施 STI。而是创建一个单独的模型。

    【讨论】:

    • 我读到当两个模型都有很多独特的字段时,单表继承是不合适的
    • 没错。无论如何,用户(专家和个人资料用户)都将拥有共同的用户属性吗?
    • 专家将需要所有用户属性,但需要自己的许多额外属性
    • 然后创建一个单独的模型。查看我的更新答案
    • 您也可以进行普通登录。你必须编写一个控制器来处理所有类型的登录
    【解决方案2】:

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

     class User < ActiveRecord::Base
     end
    
     class Expert < User
     end
    

    所以当你做 Expert.create 时,它​​会自动将用户中的类型列设置为专家。

    以后如果你想添加任何新类型的用户,只需继承与专家相同的用户即可。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 2011-04-26
      • 1970-01-01
      相关资源
      最近更新 更多