【发布时间】:2012-07-04 00:46:40
【问题描述】:
场景:我的 Rails 3.2 应用中有许多 STI 模型。有时,我使用父类来查询数据库中的子类,如下所示:
class ParentObject < ActiveRecord::Base
end
class ChildObject < ParentObject
end
class User < ActiveRecord::Base
has_many :parent_objects
end
> User.find(1).parent_objects
=> [#<ParentObject ...>, #<ChildObject ...>]
如果我检查生成的 SQL 查询,这就是我(预期)看到的:
WHERE "parent_objects"."type" IN ('ParentObject', 'ChildObject')
问题:在开发环境中,类会在发生变化时动态重新加载。如果我在 ParentObject 上更改了某些内容并且不重新启动 Rails 控制台,那么我会得到这样的结果:
> User.find(1).parent_classes
=> [#<ParentObject ...>]
检查生成的 SQL:
WHERE "parent_objects"."type" IN ('ParentObject')
但是:
> ChildObject
=> ChildObject(...)
> User.find(1).parent_objects
=> [#<ParentObject ...>, #<ChildObject ...>]
问题:我可以在 Rails 应用程序的哪个位置编写一小段代码,以便在每个 Web 服务器请求时重新加载任何 STI 模型?
【问题讨论】:
标签: ruby-on-rails eager-loading single-table-inheritance