2014-01-29 132 views
0

我在Rails中STI設置(名稱已更改爲保護無辜者)Rails的單表繼承與舊數據

class Mercedes < Car

class BMW < Car

現在,在某個階段,我需要從代碼中刪除對Mercedes的引用,但由於歷史原因想要保留數據。

當我嘗試從cars表加載所有的記錄,我得到這個錯誤:

ActiveRecord::SubclassNotFound: The single-table inheritance mechanism failed 
to locate the subclass: 'Mercedes'. This error is raised because the column 'type' 
is reserved for storing the class in case of inheritance. Please rename this 
column if you didn't intend it to be used for storing the inheritance class 
or overwrite Car.inheritance_column to use another column for that information. 

有沒有辦法忽略cars表,其typeMercedes記錄?

+0

你試圖執行的查詢是什麼 – Bijendra

+0

@GhostRider我試圖在它爆炸時執行BMW.all。所以剩下的數據會使整個表無用。 –

回答

3

您可以在您的Car類中添加default_scope { where("cars.type != 'Mercedes'") }。但是,如果這將導致您在生成這樣的變通方案時,我不會建議將這些舊數據留在生產數據庫中。如果您需要保留它,請創建一個存檔,然後將其從數據庫中刪除,或者重新構建數據,以便與您需要進行的任何代碼更改一起工作。

+0

@mu:我仍然陷在Rails 3的土地上。 –

+0

啊我明白了。好點子。我編輯了這個問題來反映你的建議。 –

+0

我仍然認爲「不要這樣做」是你答案的最佳部分:) –