当前位置:  开发笔记 > 后端 > 正文

单表继承查找问题

如何解决《单表继承查找问题》经验,为你挑选了1个好方法。

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

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

如果我有一个StockThingTemplateID,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,另一次生成另一组.它的字面意思完全相同.

笔记:

我在轨道上1.2

我已经require 'stock_thing_template'在不同的地方尝试过了.它要么没有效果,要么引起其他问题

Orion Edward.. 7

好.事实证明这是因为rails不会一直看到整个继承层次结构.当它在每个请求上重新加载所有项目时,这解释了不一致的行为(在某些地方,before_filter可能导致模型加载,在其他地方可能没有).

它可以通过推杆来修复

require_dependency 'stock_thing_template'

在所有引用这些东西的控制器的顶部.

有关rails wiki的更多信息 - 请转到页面底部



1> Orion Edward..:

好.事实证明这是因为rails不会一直看到整个继承层次结构.当它在每个请求上重新加载所有项目时,这解释了不一致的行为(在某些地方,before_filter可能导致模型加载,在其他地方可能没有).

它可以通过推杆来修复

require_dependency 'stock_thing_template'

在所有引用这些东西的控制器的顶部.

有关rails wiki的更多信息 - 请转到页面底部

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有