Q
STI和小類
2
A
回答
2
所有你應該做的是改變類型字段。確保保存記錄,並從數據庫中重新加載Ruby對象。
如果這不起作用,您能提供一些能隔離問題的Ruby代碼嗎?
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)
感謝名單奏效 – markiv 2010-06-11 20:36:04