首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多态关联的急切加载

多态关联的急切加载
EN

Stack Overflow用户
提问于 2010-07-15 05:33:04
回答 1查看 774关注 0票数 1

我不确定这会不会落在性能部分和模型/数据库部分,所以这里...

假设我有3个模型:

代码语言:javascript
复制
Movie {
has_one :interest, :as => :resource
}
Song {
has_one :interest, :as => :resource
}
Story {
has_one :interest, :as => :resource
}

还有..。

代码语言:javascript
复制
Interest {
belongs_to :resource, :polymorphic => true
}

现在,如果我需要所有电影的所有兴趣的列表,并且我还想显示这些电影对象的创建日期(表示它们有多老),那么我将使用resource_type属性,然后使用@some_interest.resource.created_at。

问题是,如果我有100个电影兴趣,那么我会得到101个查询,对吗?所以线性退化。我尝试在查询调用中使用:include => :resource,但它显示不能在多态关联中使用include。

如何快速加载或优化此问题以避免这种严重的降级??

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2010-07-15 08:11:05

如果您使用的是searchlogic,有一种特殊的语法来处理多态关系,这可能会有所帮助。您可以通过指定以type为后缀的相关类的名称,在关系的has端进行搜索。

例如,给定您的模型,您应该能够执行以下操作来获得在过去90天内创建的电影:

Interest.resource_movie_type_created_at_gt(Time.now-90.days)

Searchlogic为您设置了相关模型的连接,这应该会减轻性能方面的顾虑。

当然,您始终可以使用find_by_sql方法编写自己的SQL。

PS。一个非常有用的技巧是在编写搜索时使用turn on logging in the Rails console。这使您可以直接在控制台中看到生成的SQL,而无需深入查看日志。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3250719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档