2008-10-21 100 views
3

我有以下3個rails類,它們都存儲在一個表中,使用rails的單表繼承。單表繼承發現問題

​​

如果我有與150 ID的StockThingTemplate那麼我應該在邏輯上能夠做到這一點:

ThingTemplate.find(150) 
=> #returns me the StockThingTemplate 

而事實上這個工程,有時

當它工作,它會生成以下SQL查詢:

SELECT * FROM templates WHERE (templates.`id` = 159) AND ((templates.`type` = 'ThingTemplate') OR (templates.`type` = 'StockThingTemplate')) 

如果它不能正常工作,它會生成以下SQL查詢:

SELECT * FROM templates WHERE (templates.`id` = 159) AND ((templates.`type` = 'ThingTemplate')) 

的SQL是做什麼是應該的,但問題是,爲什麼會產生一組SQL一次,另一次不同。這實際上是完全相同的代碼。

注:

  • 我在軌道上1.2
  • 我已經在不同的地方嘗試過require 'stock_thing_template'。它要麼沒有效果,要麼造成其他問題

回答

7

好的。事實證明,這是因爲rails始終沒有看到整個繼承層次結構。當它重新加載每個請求中的所有項時,這解釋了不一致的行爲(在某些地方,before_filter可能導致模型加載,在其他地方也許不會)。

它可以通過將

require_dependency 'stock_thing_template' 

在我所有的控制器,引用這些東西的頂部固定。

More info on the rails wiki - 轉到頁面底部

+0

非常感謝。這也解決了我的問題! – JasonSmith 2009-05-18 10:54:05