Under rails 1.9.2 without the named_scope this works properly:
reload! ; Group.find(56).topics.size
Reloading…
…snip show tables etc…
Group Load (12.8ms) SELECT * FROM groups WHERE (groups.id =
Topic Columns (13.6ms) SHOW FIELDS FROM topics
SQL (81.7ms) SELECT count(*) AS count_all FROM topics WHERE
(topics.discussable_id = 56 AND topics.discussable_type = ‘Group’)
However with the named scope in there:
reload! ; Group.find(56).topics.unhidden.size
Group Load (14.3ms) SELECT * FROM groups WHERE (groups.id =
Topic Load (40.1ms) SELECT * FROM topics WHERE
(topics.discussable_id = 56 AND topics.discussable_type = ‘Group’) *
Topic Columns (13.5ms) SHOW FIELDS FROM topics
SQL (11.8ms) SELECT count() AS count_all FROM topics WHERE
(((hidden
= 0) AND (topics.discussable_id = 56 AND topics.discussable_type =
‘Group’)) AND (topics.discussable_id = 56 AND topics.discussable_type =
‘Group’))
So the problem is under the seond one, it selects all the topics and
then
does select count(*).
Under rails 1.9.1p243 this worked correctly in both cases.
Yes yes, thats what I meant =) Ruby 1.9.2 and Rails 2.3.9 it causes a
double query. Under Ruby 1.9.1p243 and Rails 2.3.9 it correctly only
does the count query.
super unless method.to_s == "respond_to_missing?"
end
elsif @reflection.klass.scopes.include?(method)
@reflection.klass.scopes[method].call(self, *args)
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.