Unsuccessful attempt to properly eager load screenshots.
Currently the virtual attribute "image_url" in the screenshots model apparently runs one SQL query each to get the packages data.
This commit is contained in:
parent
88dfb33721
commit
76d19f7e78
3 changed files with 14 additions and 8 deletions
|
|
@ -3,16 +3,22 @@ class PackagesController < ApplicationController
|
|||
@packages = Package
|
||||
|
||||
if params[:with_screenshots]=='yes'
|
||||
@packages = @packages.joins(:screenshots).where('screenshots.approved = ?', true)
|
||||
#@packages = @packages.joins(:screenshots).where('screenshots.approved = ?', true)
|
||||
|
||||
# Limit the packages to those that have approved screenshots.
|
||||
# Also eager-load the screenshots.
|
||||
@packages = @packages.includes(:screenshots).where("screenshots.approved"=>true)
|
||||
#@packages = @packages.where("screenshots.approved"=>true)
|
||||
end
|
||||
|
||||
if params[:search]
|
||||
query = '%'+params[:search]+'%'
|
||||
#if params[:search]
|
||||
#query = '%'+params[:search]+'%'
|
||||
# TODO: Index on lower(…) is missing. Does not scale.
|
||||
# TODO: Consider using a serious search engine like Xapian or ElasticSearch.
|
||||
@packages = @packages.where("lower(description) like lower(?) or lower(name) like lower(?)", query, query)
|
||||
end
|
||||
#@packages = @packages.where("lower(description) like lower(?) or lower(name) like lower(?)", query, query)
|
||||
#end
|
||||
|
||||
#@packages = @packages.order('name').includes(:screenshots).limit(20)
|
||||
@packages = @packages.order('name').limit(20)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,9 @@ class Screenshot < ActiveRecord::Base
|
|||
# Return the URL to this screenshot.
|
||||
# size: 'small' (thumbnail) or 'large' (full-size)
|
||||
# (If possible serve the screenshots statically from the web server.)
|
||||
#attr_accessor :image_url
|
||||
def image_url(size)
|
||||
# TODO: Prevents proper eager loading somehow...
|
||||
"/screenshots/#{self.package.name[0]}/#{self.package.name}/#{self.id}_#{size}.png"
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -5,9 +5,7 @@
|
|||
<ul>
|
||||
<% @packages.each do |package| %>
|
||||
<li>
|
||||
<%= package.name %> <i>(<%= package.description %>)</i>
|
||||
- has <%= package.screenshots.count %> screenshots
|
||||
<% if package.screenshots.count>0 %>
|
||||
<% if package.screenshots %>
|
||||
<%= image_tag package.screenshots.first.image_url('small') %>
|
||||
<% end %>
|
||||
</li>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue