Ruby on rails 在RubyonRails中使用每类型表继承时,如何获得类型?

Ruby on rails 在RubyonRails中使用每类型表继承时,如何获得类型?,ruby-on-rails,Ruby On Rails,我有几节课是这样的: Person { id(PK) first_name string last_name string } class Employee { person_id(FK) job_description string } class Student { person_id(FK) school_name string } 如果我有一大堆人,我怎么能不用做就知道他们都是什么类型的人呢 Student.where(per

我有几节课是这样的:

Person {
    id(PK)
    first_name string
    last_name string
}

class Employee {
    person_id(FK)
    job_description string
}

class Student {
    person_id(FK)
    school_name string
}
如果我有一大堆人,我怎么能不用做就知道他们都是什么类型的人呢

Student.where(person_id = person.id).any?

名单上的每一个人

我经常需要做类似的操作,所以单表继承是更好的选择吗?

如果是RubyonRails(ActiveRecord)

类Person 班级员工 属于某人 结束

班级学生 属于某人 结束

Person.find(Person\u id).students.any? Person.find(Person_id).employees.any

另外,为了记录在案,我只是按照你的措辞回答这个问题。我认为更好的设计是有一个名为(Role)的类,并让Employee和Student从中扩展,这样你就可以有多对多的角色关联,这样一个人既可以是学生也可以是员工,如果是Ruby on Rails(ActiveRecord),这是完全可能的

类Person 班级员工 属于某人 结束

班级学生 属于某人 结束

Person.find(Person\u id).students.any? Person.find(Person_id).employees.any


另外,为了记录在案,我只是按照你的措辞回答这个问题。我认为更好的设计是有一个名为(Role)的类,并让Employee和Student从中扩展,这样你就可以有一个多对多的角色关联,这样一个人就可以同时是学生和员工,这是完全可能的

看起来就像你要实现的一样

(见前面的问题)

有各种各样的宝石试图实现这一点, 他们每个人都有自己的观点

基本上,如果您只知道“person_id”,那么您将始终需要查找其他表以找到它是哪个类

最简单的方法是使用rails的has one在两个表之间创建一个缓存关系,而不改变任何基本内容

class Person
  has_one :employee_details, class_name: "Employee"
  has_one :student_details, class_name: "Student"

  def employee?
    employee_details.present?
  end

  def student?
    student_details.present?
  end
end
重要的是,一个人既可以是员工,也可以是学生


如果不是这样的话,那么我建议您查看Rails的单表继承,或者考虑实现它的另一种方式。

看起来您想要实现的是.< /P> (见前面的问题)

有各种各样的宝石试图实现这一点, 他们每个人都有自己的观点

基本上,如果您只知道“person_id”,那么您将始终需要查找其他表以找到它是哪个类

最简单的方法是使用rails的has one在两个表之间创建一个缓存关系,而不改变任何基本内容

class Person
  has_one :employee_details, class_name: "Employee"
  has_one :student_details, class_name: "Student"

  def employee?
    employee_details.present?
  end

  def student?
    student_details.present?
  end
end
重要的是,一个人既可以是员工,也可以是学生


如果不是这样的话,那么我建议你看看Rails的单表继承,或者考虑另一种实现方法。

个人。find(PysSoviID)。学生。有吗?仍然为每个人运行SQL查询,所以这不好。我喜欢你关于角色的建议,虽然这不是真的,但只需一个查询就能找到你要找的人。请自行查看我的意思是,如果我有一个人员列表,并且想知道每个人属于哪种类型,我仍然需要每人运行2个查询。我想我会尝试实现角色thoughPerson.find(person_id).students.any?仍然为每个人运行SQL查询,所以这不好。我喜欢你关于角色的建议,虽然这不是真的,但只需一个查询就能找到你要找的人。我的意思是,如果我有一个人员列表,并且想知道每个人属于哪种类型,我仍然需要每人运行2个查询。不过,我想我会尝试实现角色
class Person
  has_one :employee_details, class_name: "Employee"
  has_one :student_details, class_name: "Student"

  def employee?
    employee_details.present?
  end

  def student?
    student_details.present?
  end
end