2010-09-02 60 views
1

使用ActiveRecord的单表继承。由于我们可以使用@test = Employee.all并找到所有创建的员工。轨道如何做到这一点?由于我们只使用用户表。它如何知道员工和只检索员工? Rails Magic?解释任何人?先谢谢你。Rails ActiveRecord问题

Base Class : Person (inherits ActiveRecord) 
Sub-Class: Employee, Supervisor, Manager (each inherit Person) 

所以我的人表需要有一个_type和_id字段,使表多态。

我的下一个问题是我如何获得员工关联到人员表格,并且当您保存员工时,您如何才能将其实际放入员工的person_type字段中?

+0

如果你想问一个后续问题,你最好提出一个新的问题,然后再回过头来参考这个问题。这种方式将更加明显,你不会遇到人们不得不更新答案的问题。另外,正如你已经接受了这个问题的答案,人们更不可能检查出它。 – Shadwell 2010-09-05 21:47:26

回答

3

为了指示对红宝石的 用户表需要支持单 表继承,你需要一个名为“类型”一栏 添加到用户 台导轨。这里是我的用户表 定义:

CREATE TABLE用户(ID INT NOT NULL AUTO_INCREMENT,用户 VARCHAR(15)NOT NULL UNIQUE,通过 VARCHAR(40)NOT NULL,类型 VARCHAR(20)NOT NULL ,PRIMARY KEY(id));

在列名类型中,您应该使用 存储类的名称, 类类型,应该为每个用户使用 。要将某个用户 标记为管理员,请将其类型设置为 '管理员'。通过将用户的 类型设置为'管理员',您可以授予他在您的管理员模型 类中定义的 完全管理员权限 。

http://juixe.com/techknow/index.php/2006/06/03/rails-single-table-inheritance/

+0

感谢您的回复,一旦我有字段_type和_id,我如何才能将关联放入该列中? – RoR 2010-09-02 23:06:20

+0

哦,一个名为“type”的实际字段我正在考虑使用_type进行表继承。谢谢。 – RoR 2010-09-02 23:19:00

2

单个表继承使用表上的一个type柱以指示对象的类型。 ActiveRecord知道您的Employee类正在使用单表继承(它没有匹配表并且users/people表有一个类型列)。

因此,当您询问Employee.all它知道要查找用户/人员表中的所有条目,其中type == 'Employee'

如果您查看日志,SQL将显示这些查询,您将看到'魔术'发生。