【发布时间】:2008-10-21 02:34:42
【问题描述】:
我有以下3个rails类,它们都存储在一个表中,使用rails的单表继承。
class Template < ActiveRecord::Base
class ThingTemplate < Template
class StockThingTemplate < ThingTemplate
如果我有一个 ID 为 150 的 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,而另一次生成另一组。这实际上是完全相同的代码。
注意事项:
- 我在 Rails 1.2 上
- 我已经在各个地方尝试过
require 'stock_thing_template'。它要么没有效果,要么导致其他问题
【问题讨论】:
标签: ruby-on-rails ruby inheritance