所以我在当前设置中安装了Devise和rails_admin。我现在正在试行管理方案。
因为我认为许多管理需要多个用户'模特,我在找出设计和安排他们关系的正确方法时遇到了麻烦。
所以现在我有一个用户(设计)模型。
对于用户模型,我决定将我需要的模型分开(管理员,学生(示例),教授(示例))。
我读到并发现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或major?只是扔东西)。使用我之前提到的设置,我只能使用User模型属性创建它们,而不是学生本身。
我还从某个地方读到我需要一个列&#39;类型&#39;在用户中可以填写学生或教授,但我在组合所有这些解决方案时遇到了麻烦。
关于我现在应该如何进行的任何指示/建议?非常感谢。
答案 0 :(得分:3)
如果您决定使用单表继承:
Rails使用type
属性来访问相应的模型,并自动为您完成。即当您执行Student.new
时,type
属性设置为&#34;学生&#34;
所有继承类(Student,Professor等)的属性都存储在users
表中。这意味着学生和教授都将有major
,fees_schedule
等(通常不适用于教授)。
另一方面,您可能需要考虑多态关联,其中每个表都是独立的,并且与以下行相关联:
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
表中,它将显得非常混乱。 / p>