Rails ActiveRecord问题

时间:2010-09-02 22:31:32

标签: ruby-on-rails activerecord find

使用ActiveRecord的单表继承。因为我们可以使用@test = Employee.all并找到所有创建的员工。 rails如何做到这一点?因为我们只使用用户表。它如何了解员工并仅检索员工? Rails Magic?有人解释吗?提前谢谢。

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

所以我的Person表需要有一个_type和_id字段来使表具有多态性。

我的下一个问题是如何将Personee Associated与Person表相关联,当您保存员工时,如何让它实际放入person_type字段中的Employee?

2 个答案:

答案 0 :(得分:3)

  

向Ruby on Rails表明   用户表需要支持Single   要添加的表继承   用户名为“type”的列   表。这是我的用户表   定义:

     

CREATE TABLE用户(id INT NOT   NULL AUTO_INCREMENT,用户   VARCHAR(15)NOT NULL UNIQUE,传递   VARCHAR(40)NOT NULL,键入   VARCHAR(20)NOT NULL,PRIMARY KEY(id));

     

在名为type you的列中   应该存储类的名称,   应该使用的类类型   为每个用户。标记某个用户   作为管理员设置他的类型   '管理员'。通过设置用户的   输入你要给的'管理员'   他是完全的管理员权限   在管理员模型中定义   类。

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

答案 1 :(得分:2)

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

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

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