Rails_Admin多个'用户'模型+设计

时间:2015-01-02 21:14:51

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

所以我在当前设置中安装了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;在用户中可以填写学生或教授,但我在组合所有这些解决方案时遇到了麻烦。

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

1 个答案:

答案 0 :(得分:3)

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

  • Rails使用type属性来访问相应的模型,并自动为您完成。即当您执行Student.new时,type属性设置为&#34;学生&#34;

  • 所有继承类(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表中,它将显得非常混乱。 / p>