【问题标题】:Rails_Admin Multiple 'User' Models + DeviseRails_Admin 多个“用户”模型 + 设计
【发布时间】:2015-01-02 21:14:51
【问题描述】:

所以我在当前设置中安装了 Devise 和 rails_admin。我现在正在尝试使用 rails 来处理管理场景。

由于我认为许多管理需要多个“用户”模型,因此在找出设计和安排它们之间关系的正确方法时遇到了麻烦。

所以现在我有一个用户(设计)模型。

对于用户模型,我决定分离我需要的模型(管理员、学生(示例)、教授(示例))。

我阅读并发现 STI 似乎是这里的解决方案,所以我将它们设置为

class User < ActiveRecord::Base
     devise :database_authenticatable, 
            :recoverable, :rememberable, :trackable, :validatable
end

class Student < User
end

class Professor < User
end

在 rails_admin 中,用户 CRUD 基本完成,使用此设置我设法找到了我想要的配置。例如,创建一个学生将被识别为用户。但是,我现在遇到的问题是我是否有正确的设置,因为我实际上可能需要一个学生拥有自己的属性(比如 student_id 或专业?只是在这里扔东西)。使用我之前提到的设置,我只能使用 User 模型属性创建它们,而不是 Student 本身。

我还从某处读到,我需要在 User 中有一个“类型”列,可以填充学生或教授,但我在组合所有这些解决方案时遇到了麻烦。

关于我现在应该如何进行的任何指示/建议?非常感谢。

【问题讨论】:

  • 通过使用多态关联让它工作。但是,通过 rails_admin 创建一个学生用户需要我首先创建一个“学生”实体,然后创建一个用户才允许我将学生实体设置为用户并将用户设置为学生。这看起来很麻烦,如果我可以直接创建一个学生而不是来回访问用户部分会更好。对此有什么想法吗?另外,我将如何设置以查看学生部分中用户模型的属性?我将名称等属性设置为“用户”,并将学生留给“专业”等。
  • 只是一个建议:如果以下答案对您有用,您可能想接受它?此外,您可能希望将上述评论作为两个新问题发布,1)rails_admin,2)访问属性。
  • @roob,抱歉耽搁了。感谢您的帮助。

标签: ruby-on-rails ruby-on-rails-4 devise rails-admin


【解决方案1】:

如果您决定使用单表继承:

  • Rails 使用type 属性来达到适当的模型并自动为您完成。即当您执行Student.new 时,type 属性设置为“学生”

  • 所有继承类(Student、Professor 等)的属性都存储在users 表中。这意味着学生和教授都将拥有majorfees_schedule 等(通常不适用于教授)。

这是关于Single Table Inheritance的文档

另一方面,您可能需要考虑多态关联,其中每个表都是独立的,并且按照以下方式关联:

class User < ActiveRecord::Base
  belongs_to :member, polymorphic: true
  ...
end

class StudentMember < ActiveRecord::Base
  has_one :user, as: :member
  ...
end

class ProfessorMember < ActiveRecord::Base
  has_one :user, as: :member
  ...
end

阅读更多关于多态关联here

多态关联似乎更适合您的情况,因为学生、教授、管理人员等可能有许多不同的属性,如果您将所有这些属性都转储到 users 表中,它看起来会很混乱。

【讨论】:

  • 嗨,通过使用多态关联让它工作。现在我可以看到学生与用户是分开的。但是,通过 rails_admin 创建一个学生用户需要我首先创建一个“学生”实体,然后创建一个用户才允许我将学生实体设置为用户并将用户设置为学生。这看起来很麻烦,如果我可以直接创建一个学生而不是来回访问用户部分会更好。有什么想法吗?
  • 对不起,我不使用 rails_admin 并不能真正帮助你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多