我正在设计一个应用程序,其中将有两个(不一定是不同的)角色的用户,教师和学生。所以,我认为我有一个具有相关角色的用户类。
为了使代码(希望)更具可读性,我想通过需要角色的别名来引用User类的实例。例如,如果用户必须具有学生的角色,我想做这样的事情:
class Section < ActiveRecord::Base
alias :user :student
alias :user :teacher
belongs_to :teacher
has_many :students
end
有没有办法做这样的事情?
答案 0 :(得分:1)
如果您正在处理角色,您可能需要查看Rolify gem。它非常简单,并且有文档可以向您展示处理角色的一些常用方法。上面的方法看起来有些不同寻常,可能适合您的使用案例,但我已经为Rolify购买了相当大的应用程序。
答案 1 :(得分:1)
如果我理解你正在尝试做什么,你可以按如下方式对User进行子类化:
class Teacher < User
end
class Student < User
end
并使用belongs_to和has_many关联,就像你在Section中一样。
答案 2 :(得分:1)
你可以做到
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
从以下位置复制的答案: rails model has_many of itself
修改强>
您如何区分教师与用户? 我认为你应该在Section表中创建一个列(section_type)。 然后你可以创建像
这样的范围{{1}}