【问题标题】:Modeling Users in Rails在 Rails 中建模用户
【发布时间】:2015-03-17 08:53:32
【问题描述】:

在我目前正在开发的大学 HR Web 应用程序中实施我的模型设计时,我需要建议/帮助。

首先,我的表格有这些模型及其字段:

Students
 * different fields
Faculty
 * different fields
Users
 * username
 * password_digest

我有 CRUD 的 Student 和 Faculty 对象,它们在自己的表中具有其独特的字段/属性。同时,我将这些对象视为使用该应用程序的用户类型。

我对如何正确建模它们感到困惑,尝试使用 ActiveRecord 的 STI 或多态技术。我希望应用程序做的就是识别正在登录的用户类型,然后显示或重定向到该类型用户的相应页面。同时参考其在Faculty 或Student 表中的相关记录。

假设我有这些条件,解决这个问题的最佳方法是什么:

  • 用户可以是学生、教师或管理员。稍后我也可以将非教师成员添加/建模到应用程序中。

  • 学生/教师可以选择拥有或不拥有关联的用户帐户。 (一些学生和教职员工不想使用该应用程序)

  • 管理员用户可以访问应用程序的管理 (CRUD) 端。学生和教师只能处理他们自己的记录。

我可能错了,但我的赌注是多态并将引用放在用户模型中:

class User < ActiveRecord::Base
  belongs_to :userable, polymorphic: true
end

class Student < ActiveRecord::Base
  has_one :user, as: :userable
end

class Faculty < ActiveRecord::Base
  has_one :user, as: :userable
end

P.S.:我不知道“可用”一词是否正确,如果有更好的命名方式,请纠正我。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 rails-activerecord polymorphic-associations sti


    【解决方案1】:

    一个简单的方法是,因此您也可以轻松管理常用字段

    # User should have a type field (string)
    class User < ActiveRecord::Base
    
    end
    
    class Student < User
    
    end
    
    class Faculty < User
    
    end 
    

    【讨论】:

    • 如果我从 User 模型继承,我将如何将新记录添加到我的 Student 对象/表中?这不加起来。
    【解决方案2】:

    这非常清楚地说明了您需要走的路:

    “学生/教师可以选择是否拥有关联的用户帐户。(一些学生和教师不想使用该应用程序)

    这意味着 Student、Faculty 和 User 需要是完全不同的东西:您需要能够拥有一个没有用户帐户的 Faculty 帐户。所以,我认为你的多态方法是正确的方法。

    顺便说一句,我会重命名学院,因为学院有不同的含义:学院是大学内的一个部门或部门,它不是一个人。稍后在您的应用程序开发中,您可能需要将班级、学生或工作人员与教员相关联,然后就会变得混乱。我会使用 FacultyMember,因为这是通常描述员工的方式。

    “userable”用于描述这种关系的一个尴尬词。 “学者”呢?这既可以描述教职员工也可以描述学生,并且它传达了这样一种想法,即它指的是一个真实的人,而不是“用户”,它实际上是一个用户帐户而不是一个人。

    【讨论】:

    • 为FacultyMember 点赞!
    猜你喜欢
    • 2016-12-30
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多