我有以下3个rails类,它们都存储在一个表中,使用rails的单表继承。

class Template < ActiveRecord::Base
class ThingTemplate < Template
class StockThingTemplate < ThingTemplate

如果我有一个id为StockThingTemplate150,那么在逻辑上我应该能够做到这一点:
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,另一次生成另一组sql。完全一样的代码。
笔记:
我在铁轨上1.2
我已经在不同的地方试过了。它要么没有效果,要么引起其他问题

最佳答案

好啊。原来这是因为rails并不总是看到整个继承层次结构。当它根据每个请求重新加载所有项时,这就解释了不一致的行为(在某些地方,before_过滤器可能会导致模型加载,在其他地方,可能不会)。
它可以通过放置

require_dependency 'stock_thing_template'

在我所有的控制器中,最重要的是那些东西。
More info on the rails wiki-转到页面底部

10-08 09:00
查看更多