我试图优化我的Rails 2应用程序,以限制mySQL查询数量。 这里有一个简单的例子,用3个模型:Gem will_paginate忽略:包含ActiveRecord参数的查找方法
一篇文章有很多图片,通过一个连接模型ArticlePicture。 “主要图片”是第一个,尊重图片的顺序。
class Article < ActiveRecord:Bast
has_many :articles_pictures, :order => 'sequence'
has_many :pictures, :through => :articles_pictures, :order => 'sequence'
has_one :main_picture, :through => :articles_pictures, :source => :picture, :conditions => ["# {ArticlesPicture.table_name}.sequence = ?", 0]
end
的ArticlePicture是文章和图片之间的连接模式,以“序列”字段。
class ArticlesPicture < ActiveRecord::Base
belongs_to :article
belongs_to :picture
end
A图片可以属于很多文章。
class Picture < ActiveRecord::Base
has_many :articles_pictures
has_many :articles, :through => :articles_picture
end
在我的控制,我呼吁所有的文章和分页它:
@articles = Article.all.paginate(:per_page => 50)
在我看来,我列出的文章与 “每个” 呼吁
article.main_picture
显然Rails为50张第一张图片调用了一个“SELECT”,这并不是非常优化的。所以我尝试调用文章与
@articles = Article.find(:all, :include => :main_picture).paginate(:per_page => 50)
但Rails会创建一个“选择”对整个图像表,即
SELECT `articles_pictures`.*
FROM `articles_pictures`
WHERE (`articles_pictures`.article_id IN (1,2,3,4,5,6,7,8,9,10,11,12,.....)
有我忘了任何选项?
问候
皮埃尔
我写“一切”这个页面上,因为我的实际使用情况下调用一些命名范围。您的解决方案有效:非常棒! – pierallard 2013-02-21 17:05:29
我不能,我是一个新手,我需要做我的声望。我唯一能做的就是谢谢你这样:) – pierallard 2013-02-21 17:33:31
完成!再次感谢 – pierallard 2013-02-22 08:11:50