我不确定这会不会落在性能部分和模型/数据库部分,所以这里...
假设我有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。
如何快速加载或优化此问题以避免这种严重的降级??
任何帮助都将不胜感激!
发布于 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,而无需深入查看日志。
https://stackoverflow.com/questions/3250719
复制相似问题