class JobsController < ApplicationController
...
# Alt 1 - standard hobo, no filters, orders, where or selects
def index
hobo_index :per_page => 10
end
# Alt 2 - Using a scope to add order from gui
#def index
# hobo_index apply_order(Job.scoped) , :per_page => 10
#end
...
private
...
def apply_order(scope)
order_field = session[:order_job_field]
order_direction = session[:order_job_direction]
if Job.order_field_list.include?(order_field) && Job.order_direction_list.include?(order_direction)
return scope.order("jobs.#{order_field} #{order_direction=='Ascending'?'ASC':'DESC'}")
end
return scope
end
...
end
Started GET "/jobs" for 127.0.0.1 at 2011-05-19 01:13:00 +0200This seems fine, 1 job query, limiting itself to 10 hits, ordered as default.
...
Processing by JobsController#index as HTML
SQL (0.0ms) SELECT COUNT(*) FROM "users"
User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
Job Load (17.0ms) SELECT "jobs".* FROM "jobs" ORDER BY updated_at DESC LIMIT 10 OFFSET 0
SQL (1.0ms) SELECT COUNT(*) FROM "jobs"
User Load (3.0ms) SELECT "users".* FROM "users" LIMIT 30
Started GET "/jobs" for 127.0.0.1 at 2011-05-19 01:15:31 +0200As you can see, hobo/rails now executes the Job select-statement twice. One time similar to the first select with a limit, as expected. The second select is unexpected though.
...
Processing by JobsController#index as HTML
SQL (0.0ms) SELECT COUNT(*) FROM "users"
User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
Job Load (89.0ms) SELECT "jobs".* FROM "jobs" ORDER BY jobs.updated_at DESC LIMIT 10 OFFSET 0
SQL (1.0ms) SELECT COUNT(*) FROM "jobs"
Job Load (2653.2ms) SELECT "jobs".* FROM "jobs" ORDER BY jobs.updated_at DESC
User Load (3.0ms) SELECT "users".* FROM "users" LIMIT 30
--
You received this message because you are subscribed to the Google Groups "Hobo Users" group.
To post to this group, send email to hobo...@googlegroups.com.
To unsubscribe from this group, send email to hobousers+...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/hobousers?hl=en.
--
> When loading the alternative 1 (index) the log ouputs the following (I have "set_default_order 'updated_at DESC' in the Job-model)
> Started GET "/jobs" for 127.0.0.1 at 2011-05-19 01:13:00 +0200
> ...
> Processing by JobsController#index as HTML
> SQL (0.0ms) SELECT COUNT(*) FROM "users"
> User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
> Job Load (17.0ms) SELECT "jobs".* FROM "jobs" ORDER BY updated_at DESC LIMIT 10 OFFSET 0
> SQL (1.0ms) SELECT COUNT(*) FROM "jobs"
> User Load (3.0ms) SELECT "users".* FROM "users" LIMIT 30
> This seems fine, 1 job query, limiting itself to 10 hits, ordered as default.
>
> But, when I switch to using the alternative 2 index and use a scope (alternative 2) the output looks like this (even without any specific order specified):'
> Started GET "/jobs" for 127.0.0.1 at 2011-05-19 01:15:31 +0200
> ...
> Processing by JobsController#index as HTML
> SQL (0.0ms) SELECT COUNT(*) FROM "users"
> User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
> Job Load (89.0ms) SELECT "jobs".* FROM "jobs" ORDER BY jobs.updated_at DESC LIMIT 10 OFFSET 0
> SQL (1.0ms) SELECT COUNT(*) FROM "jobs"
> Job Load (2653.2ms) SELECT "jobs".* FROM "jobs" ORDER BY jobs.updated_at DESC
> User Load (3.0ms) SELECT "users".* FROM "users" LIMIT 30
> As you can see, hobo/rails now executes the Job select-statement twice. One time similar to the first select with a limit, as expected. The second select is unexpected though.
>
> Can anyone explain why and possibly pinpoint an error and/or a solution?
I've seen this happen before with when calling responds_to? on association / scope proxies. It was fixed in the 1.0 branch, but Rails 3 may have found a new way to mess it up.
--Matt Jones
From: Ronny Hanssen <super...@gmail.com>
Subject: [Hobo Users] Duplicate SQL-queries in hobo_index finder
Date: Wed, 18 May 2011 16:35:25 -0700 (PDT)
> As you can see, hobo/rails now executes the Job select-statement twice. One
> time similar to the first select with a limit, as expected. The second
> select is unexpected though.
reproduced more simply with:
>> User.paginate(:page => 1); nil
User Load (2.6ms) SELECT "users".* FROM "users" LIMIT 30 OFFSET 0
>> User.order("id").paginate(:page => 1); nil
User Load (2.7ms) SELECT "users".* FROM "users" ORDER BY id LIMIT 30 OFFSET 0
User Load (2.0ms) SELECT "users".* FROM "users" ORDER BY id desc
I filed this issue as
https://hobo.lighthouseapp.com/projects/8324-hobo/tickets/952-duplicated-sql-queries-when-paginating
and I'm looking for a solution.
-----
Tomoaki Hayasaka <haya...@pfsl.mech.tohoku.ac.jp>
--
--
Domizio, would you update the ticket status? I have no rights to do
that and I forgot trying [#952:resolved].
-----
Tomoaki Hayasaka <haya...@pfsl.mech.tohoku.ac.jp>
oops, thanks.
-----
Tomoaki Hayasaka <haya...@pfsl.mech.tohoku.ac.jp>