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