繁体   English   中英

渴望加载多态关联

[英]Eager loading for polymorphic associations

不确定这是否会属于性能部分以及模型/数据库部分,所以这里...

假设我有3个模型:

Movie {
has_one :interest, :as => :resource
}
Song {
has_one :interest, :as => :resource
}
Story {
has_one :interest, :as => :resource
}

还有...

Interest {
belongs_to :resource, :polymorphic => true
}

现在,如果我需要所有电影的所有兴趣列表,并且还想显示这些电影对象的创建日期(以说明它们的年龄),则可以使用对resource_type属性的查找,然后使用@ some_interest.resource .created_at。

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

我如何急于加​​载或优化此问题以避免这种严重的退化?

任何帮助将不胜感激 !!

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

例如,给定您的模型,您应该能够执行以下操作以获取最近90天内制作的电影:

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

Searchlogic为您设置了相关模型上的联接,这可以缓解性能问题。

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

PS。 一个非常有用的技巧是在编写搜索时打开Rails控制台中的日志记录 这样,您就可以直接在控制台中查看生成的SQL,而不必深入研究日志。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM