From 76d19f7e78a1fe389a9e0a5b8b362860eddd0e33 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Wed, 7 Aug 2013 00:18:20 +0200 Subject: [PATCH] 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. --- app/controllers/packages_controller.rb | 16 +++++++++++----- app/models/screenshot.rb | 2 ++ .../packages/_packages_search_results.html.erb | 4 +--- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/controllers/packages_controller.rb b/app/controllers/packages_controller.rb index ee3ffac..509ac06 100644 --- a/app/controllers/packages_controller.rb +++ b/app/controllers/packages_controller.rb @@ -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 diff --git a/app/models/screenshot.rb b/app/models/screenshot.rb index 63578d1..26e2a00 100644 --- a/app/models/screenshot.rb +++ b/app/models/screenshot.rb @@ -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 diff --git a/app/views/packages/_packages_search_results.html.erb b/app/views/packages/_packages_search_results.html.erb index c104869..e33a337 100644 --- a/app/views/packages/_packages_search_results.html.erb +++ b/app/views/packages/_packages_search_results.html.erb @@ -5,9 +5,7 @@