Rails_Admin 多个 'User' 模型 + 设计
Rails_Admin Multiple 'User' Models + Devise
所以我在当前设置中安装了 Devise 和 rails_admin。我现在正在尝试 rails 管理方案。
由于我认为许多管理需要多个 'user' 模型,因此我在找出设计和安排它们关系的正确方法时遇到了麻烦。
所以现在我有一个用户(设计)模型。
对于用户模型,我决定将我需要的模型分开(管理员、学生(示例)、教授(示例))。
我看了一圈,发现 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 或专业?只是把东西扔在这里)。使用我之前提到的设置只能让我使用用户模型属性创建它们,而不是学生本身。
我还从某个地方读到,我需要在用户中有一列 'type',可以用学生或教授填充,但我在组合所有这些解决方案时遇到了问题。
关于我现在应该如何进行的任何 pointers/suggestions?非常感谢。
如果您决定使用单一 Table 继承:
type
属性被 Rails 用来找到合适的模型,它会自动为您完成。即,当您执行 Student.new
时,type
属性设置为 "Student"
所有继承类(学生、教授等)的属性都存储在users
table中。这意味着 Student 和 Professor 都会有 major
、fees_schedule
等(通常不适用于教授)。
的文档
另一方面,您可能需要考虑 多态关联 ,其中每个 table 都是独立的,并且按照以下方式关联:
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
table.
所以我在当前设置中安装了 Devise 和 rails_admin。我现在正在尝试 rails 管理方案。
由于我认为许多管理需要多个 'user' 模型,因此我在找出设计和安排它们关系的正确方法时遇到了麻烦。
所以现在我有一个用户(设计)模型。
对于用户模型,我决定将我需要的模型分开(管理员、学生(示例)、教授(示例))。
我看了一圈,发现 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 或专业?只是把东西扔在这里)。使用我之前提到的设置只能让我使用用户模型属性创建它们,而不是学生本身。
我还从某个地方读到,我需要在用户中有一列 'type',可以用学生或教授填充,但我在组合所有这些解决方案时遇到了问题。
关于我现在应该如何进行的任何 pointers/suggestions?非常感谢。
如果您决定使用单一 Table 继承:
type
属性被 Rails 用来找到合适的模型,它会自动为您完成。即,当您执行Student.new
时,type
属性设置为 "Student"所有继承类(学生、教授等)的属性都存储在
users
table中。这意味着 Student 和 Professor 都会有major
、fees_schedule
等(通常不适用于教授)。
另一方面,您可能需要考虑 多态关联 ,其中每个 table 都是独立的,并且按照以下方式关联:
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
table.