This project is archived and is in readonly mode.
NamedScope#any?
Reported by Jan De Poorter | July 23rd, 2008 @ 11:53 AM | in 2.x
When I call any?
without a block on an Association I get this SQL query:
user.pages.any?
SQL (0.000356) SELECT count(*) AS count_all FROM `pages` WHERE (`pages`.user_id = 114564551)
When I do the same on a NamedScope I get this:
user.pages.active.any?
SQL (0.000331) SELECT * FROM `pages` WHERE (`pages`.user_id = 114564551) AND (`pages`.`status` = 'active')
The attached patch does a count like it allready happens on associations.
Comments and changes to this ticket
-
Tarmo Tänav July 23rd, 2008 @ 11:57 AM
Actually neither should be doing count() as exists?({}) is much faster (it's faster to fetch one record compared to counting them all).
-
Tarmo Tänav July 23rd, 2008 @ 11:59 AM
Ofcourse exists?() should not be used in case the records are already loaded.
-
Repository July 23rd, 2008 @ 12:05 PM
- State changed from new to resolved
(from [93e10f9911fb2a096681ee0a0bc82487a9a06c44]) Ensure NamedScope#any? uses COUNT query wherever possible. [#680 state:resolved]
Signed-off-by: Pratik Naik
-
Paweł Kondzior August 6th, 2008 @ 08:55 PM
Method
any?
is not the same as!empty?
[nil].any? will return false [nil].empty? will return false
But maybe here there is no case when AR can return [nil,nil,nil] array. But i think rails shouldn't break MRI here.
-
Tarmo Tänav August 7th, 2008 @ 08:44 AM
If there was a case where an association would return [nil] it would by itself be an error in AR so there can't be a a case where any? on associations wcould behave differently than on arrays.
Create your profile
Help contribute to this project by taking a few moments to create your personal profile. Create your profile »
<h2 style="font-size: 14px">Tickets have moved to Github</h2>
The new ticket tracker is available at <a href="https://github.com/rails/rails/issues">https://github.com/rails/rails/issues</a>