2010-09-02 65 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將顯示這些查詢,您將看到'魔術'發生。