Rails中的别名模型名称

时间:2016-02-07 18:33:18

标签: ruby-on-rails

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

为了使代码(希望)更具可读性,我想通过需要角色的别名来引用User类的实例。例如,如果用户必须具有学生的角色,我想做这样的事情:

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

  belongs_to :teacher
  has_many :students
end

有没有办法做这样的事情?

3 个答案:

答案 0 :(得分:1)

如果您正在处理角色,您可能需要查看Rolify gem。它非常简单,并且有文档可以向您展示处理角色的一些常用方法。上面的方法看起来有些不同寻常,可能适合您的使用案例,但我已经为Rolify购买了相当大的应用程序。

https://github.com/RolifyCommunity/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}}