ADA*_*DAM 16 ruby activerecord ruby-on-rails ruby-on-rails-3
我有一张包含许多图像的文章表
对于每个文章对图像进行排序,其中第一个有序图像旨在作为文章缩略图.
在Article控制器索引方法中,我目前正在执行以下操作以限制2个活动记录查询;
@articles = Article.where(:active => true).includes(:images)
Run Code Online (Sandbox Code Playgroud)
并访问缩略图:
# article model
def thumb
self.images.first if self.images
end
Run Code Online (Sandbox Code Playgroud)
问题是这只有2个查询,但如果每篇文章有10个图像,并且每页有50篇文章,那么我已经将500个图像行加载到内存中.
在活动记录中是否有更有效的方法.希望不必使用find_by_sql
Dam*_*ien 20
2个查询
@articles = Article.where(:active => true).includes(:thumb)
# app/model/article.rb
has_one :thumb, :class_name => 'Image',
:conditions => { :ordinal => 1 }
Run Code Online (Sandbox Code Playgroud)
1个查询
如果某些物品没有拇指,请不要使用此解决方案
如果要在连接表上指定条件,可能应该使用joins而不是includes:
@articles = Article.joins(:images)
.where(:active => true,
:images => { :ordinal => 1 })
.includes(:images)
Run Code Online (Sandbox Code Playgroud)
它只加载图像在哪里 :ordinal => 1
我希望它有所帮助
在为预先加载的关联指定条件时joins和之间的区别includes:
"即使Active Record允许您像加入一样指定热切加载关联的条件,但推荐的方法是使用联接.
[...]
includes生成一个包含LEFT OUTER JOIN的查询,而该joins方法将使用INNER JOIN函数生成一个查询."有关更多帮助,请参阅"Active Record查询接口指南 "中的" 指定Eager Loaded Associations上的条件"部分.
| 归档时间: |
|
| 查看次数: |
9166 次 |
| 最近记录: |