首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计模型从另一个设计模型继承

设计模型从另一个设计模型继承
EN

Stack Overflow用户
提问于 2016-11-03 06:16:48
回答 1查看 718关注 0票数 0

我正在创建一个在线房地产平台,以方便(正常)用户和房地产代理。该平台有以下用户类型:

  • 的普通用户:可以搜索房屋的租金/购买,审查机构等。
  • 代理:可以上传房屋出租/出售等帖子
  • 雇员:为一家机构工作
  • 超级管理员:管理站点
  • 团队成员:管理由超级管理员委派的部分站点

然后,每个用户类型都有不同的字段(每个字段添加4-6个字段)。正常的用户和机构可以自行注册.员工和管理员可以分别由代理机构和超级管理员注册。此外,用户类型有一些不同的多个角色(这与本例中的讨论无关)。

目前,我有三种不同的设计模式(用户,代理和超级管理)。他们有不同的登录和注册表格,但共享相同的会话Reference: [[https://github.com/plataformatec/devise/wiki/How-to-Setup-Multiple-Devise-User-Models]][1]用户有通过社交媒体(OmniAuth)注册的设施,但代理必须通过私人电子邮件Id注册。管理员只能由超级管理员注册。

来了需求问题

下面的字段是我所确定的在上述三种用户类型之间共享的:Email address & Username,它们必须对所有情况都是唯一的。例如,如果一个机构有一个用户名,那么用户就不能使用相同的用户名注册。目前,我们没有满足上述要求,因为我们有不同的表/模型的不同类型的用户。

我的计划

现在,由于这些用户都是与应用程序不同部分交互的真正不同的用户,所以有三个不同的设计模型感觉很干净。因此,我认为应该创建一个父级设计模型,该模型应该由所有类型的用户模型继承。这样可以帮助我解决我的问题。但现在,我对如何继承父母设计模型并将其用于我的案例并不自信。

第二个选项是使用STI (单表继承)。但我对这一方法的主要关注是,它会给注册和安全问题造成混乱。

现在我的问题是我研究的选择。你推荐我选什么。此外,如果你能举个例子来详细说明,那就太好了。

附注:我倾向于第一个选择,因为我已经做了三种不同的模式和他们的登录/注册的东西。:)

EN

回答 1

Stack Overflow用户

发布于 2016-11-03 06:24:53

不确定如果没有角色系统,你将如何完成这一任务。我认为您可以使用名称空间或对其进行范围调整,但并不是保持对特定用户组的访问的最安全。至少在我的作品里。

您可以使用单表继承(STI)。

基本上,你可以这样做(如果我正确理解你的话)

代码语言:javascript
复制
class User < ApplicationRecord
 # MASTER
end

class AnotherUser < User
 # Inherits attributes from User Table
end

按照这个路线,您需要将type:string添加到用户模型中。

以下是一些参考链接:

http://api.rubyonrails.org/classes/ActiveRecord/Inheritance.html http://eewang.github.io/blog/2013/03/12/how-and-when-to-use-single-table-inheritance-in-rails/

当我在STI路上冒险的时候他们帮了我。

例如,在一个项目中,我这样做:

代码语言:javascript
复制
class User < ApplicationRecord
  # Devise Modules Here
end

class Admin < User

end

class SuperAdmin < User

end

现在我发现的棘手部分是创建这些用户。我选择创建一个控制器和一个链接,所以在我的应用程序中,用户只能由管理员或超级管理员创建,管理只能由超级管理员创建。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40394977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档