ruby-on-rails - Rails_Admin 多个 'User' 模型 + 设计

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

所以我在当前设置中安装了 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 将被识别为一个用户。但是,我现在遇到的问题是我是否有正确的设置,因为我可能实际上需要一个学生有自己的属性(比如 student_id 或 major?只是把东西扔在这里)。使用我之前提到的设置只能让我使用用户模型属性创建它们,而不是学生本身。

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

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

最佳答案

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

  • Rails 使用 type 属性来获取合适的模型,它会自动为您完成。即当您执行 Student.new 时,type 属性设置为“Student”

  • 所有继承类(Student、Professor 等)的属性都存储在users 表中。这意味着 Student 和 Professor 都有 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 中,它看起来会很困惑表。

关于ruby-on-rails - Rails_Admin 多个 'User' 模型 + 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27748642/

相关文章:

ruby-on-rails - 为什么 Rails 查询缓存不起作用?

mysql - Rails 时区 - 本地主机和生产服务器之间的结果不同

ruby-on-rails - 无法运行 Rails 服务器,找不到 Gem 'rails(4.2.5.1) x86-mingw32'

ruby-on-rails - Ruby on Rails 修改而不是编辑

ruby-on-rails-3 - cancan Skip_authorization_check 用于设计身份验证

ruby-on-rails - 电子邮件验证错误在 obj.errors.full_messages 中出现两次(Rails 3.2、Devise、RSpec)

ruby-on-rails - 将 bool 值分配给 jRuby/ruby on rails 中的 session 属性

ruby-on-rails - 邮件错误缺少模板

javascript - 在 Rails 应用程序中加载自定义 javascript 文件

ruby-on-rails - Rails ActiveRecord 创建或查找