我有以下3个rails类,它们都存储在一张表中,使用rails的单表继承。
class Template < ActiveRecord::Base
class ThingTemplate < Template
class StockThingTemplate < ThingTemplate
如果我有一个StockThingTemplate
身份证号为150
那么从逻辑上我应该能够做到这一点:
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。这实际上是完全相同的代码。
Notes:
- 我在 Rails 1.2 上
- 我已经尝试过了
require 'stock_thing_template'
在各个地方。它要么没有效果,要么导致其他问题
好的。事实证明,这是因为 Rails 并不总是能看到整个继承层次结构。由于它会在每个请求上重新加载所有项目,这解释了不一致的行为(在某些地方 before_filter 可能导致模型加载,在其他地方可能不会)。
可以通过放置来修复
require_dependency 'stock_thing_template'
在我所有引用这些东西的控制器的顶部。
有关 Rails wiki 的更多信息 http://wiki.rubyonrails.org/rails/pages/SingleTableInheritance- 转到页面底部
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)