Ruby on rails Rails中的模型名称别名

Ruby on rails Rails中的模型名称别名,ruby-on-rails,Ruby On Rails,我正在设计一个应用程序,其中将有两个(不一定不同)角色的用户,教师和学生。所以,我想我应该有一个用户类和相关的角色 为了使代码(希望)更具可读性,我希望通过需要角色的别名引用User类的实例。例如,如果用户必须具有student角色,我希望执行以下操作: class Section < ActiveRecord::Base alias :user :student alias :user :teacher belongs_to :teacher has_many :stu

我正在设计一个应用程序,其中将有两个(不一定不同)角色的用户,教师和学生。所以,我想我应该有一个用户类和相关的角色

为了使代码(希望)更具可读性,我希望通过需要角色的别名引用User类的实例。例如,如果用户必须具有student角色,我希望执行以下操作:

class Section < ActiveRecord::Base
  alias :user :student
  alias :user :teacher

  belongs_to :teacher
  has_many :students
end
class部分

有没有办法做到这一点?

如果你正在处理角色,你可能想看看RolifGem。它非常简单,有文档可以向您展示一些处理角色的常用方法。上面的方法似乎有点不合常规,这可能适合您的使用案例,但我很幸运Rolify适用于相当大的应用程序


如果我正确理解您要做的事情,您可以按如下方式对用户进行子类化:

class Teacher < User
end

class Student < User
end
班主任
并使用“属于”和“有许多关联”,就像您在部分中所做的那样。

您可以这样做

class Section < ActiveRecord::Base
  belongs_to :teacher, :class_name => "Section", :foreign_key => "teacher_section_id"
  has_many :students, :class_name => "Section", :foreign_key => "teacher_section_id"
end
class部分“区段”,“外键=>“教师区段id”
有很多:学生,:班级名称=>“部分”,“外键=>“教师部分id”
结束
答案抄袭自:

编辑:

你将如何区分教师和用户? 我认为您应该在section表中为此创建一列(section_type)。 然后您可以创建如下范围

class Section < ActiveRecord::Base
  belongs_to :teacher,-> {where("section_type == 'teacher'")} ,:class_name => "Section", :foreign_key => "teacher_section_id"
  has_many :students, -> {where("section_type == 'students'")},:class_name => "Section", :foreign_key => "teacher_section_id"
end
class部分{where(“section\u type=='teacher')},:class\u name=>“section”,:foreign\u key=>“teacher\u section\u id”
有很多:学生,->{where(“section\u type=='students')},:class\u name=>“section”;:foreign\u key=>“teacher\u section\u id”
结束

对于既是教师又是学生的用户(例如正在教授本科生研讨会的研究生)来说,这是否有效?不,我不知道这是一个用例。在这种情况下,我会考虑errata的rolify建议。我认为这不适合OP的案例。是的,一开始我不清楚用户可以是学生也可以是教师。你不能将
类型
用作属性名称-它仅保留给
STI