不确定这可能属于性能部分以及模型/数据库部分,所以这里...... [/ p>
假设我有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。
如何急切加载或优化此问题以避免严重降级?
非常感谢任何帮助!!
答案 0 :(得分:0)
如果您使用searchlogic,则可以使用特殊语法来处理可能有用的多态关系。您可以通过指定以has
为后缀的相关类的名称来搜索关系的type
侧。
E.g。鉴于你的模特,你应该能够做这样的事情来获得过去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,而无需深入了解日志。