2010-06-11 51 views
2

我想知道,什麼是一個轉換子類記錄到另一個子類記錄的軌道方式,只是改變類型不工作,也超類到子類,反之亦然。STI和小類

在此先感謝

Markiv

回答

2

所有你應該做的是改變類型字段。確保保存記錄,並從數據庫中重新加載Ruby對象。

如果這不起作用,您能提供一些能隔離問題的Ruby代碼嗎?

+0

感謝名單奏效 – markiv 2010-06-11 20:36:04

0

你問的是如何將一個子類的對象改爲其超類的不同子類?這在OO方案中並不是真的可行。可以將一個對象從一個超類轉換爲一個子類,但是不能將其轉換回來,因爲該對象現在可能包含超類所沒有的變量和方法。

+0

據稱號這篇文章中,OP使用單表繼承。 – 2010-06-11 20:29:31

+0

你是對的,這是可能的,儘管你仍然可能拉東西沒有道理,但它不應該打破你的對象。我對這個用例很感興趣,你們是否介意詳細說明你需要做些什麼來改變類型列? – lambdabutz 2010-06-11 20:53:32

0

多態性Rails會做的伎倆:

subclass1record.becomes(Subclass2) 

注:新的實例將共享一個鏈接到相同的屬性原始類。所以任何一個實例中的屬性的改變都會影響另一個。

爲了避免這種情況,可以先複製記錄:

subclass1record_new = subclass1record.dup 

然後改用新的紀錄:

subclass1record_new.becomes(Subclass2) 

http://apidock.com/rails/ActiveRecord/Persistence/becomes