Lighthouse has a new layout. Prefer the old one? Return to the old layout, and switch back any time from the link at the top of each page.

This project is archived and is in readonly mode.

NamedScope#any?

#680

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.

Reported by Jan De Poorter · July 23rd, 2008 @ 11:53 AM

State: resolved
Milestone: 2.x
Assigned to: nobody
Importance: none

Activity

  1. Tarmo Tänav
    Tarmo Tänav

    Actually neither should be doing count() as exists?({}) is much faster (it's faster to fetch one record compared to counting them all).

    July 23rd, 2008 @ 11:57 AM

  2. Tarmo Tänav
    Tarmo Tänav

    Ofcourse exists?() should not be used in case the records are already loaded.

    July 23rd, 2008 @ 11:59 AM

  3. Repository
    Repository
    • State changed from new to resolved

    (from [93e10f9911fb2a096681ee0a0bc82487a9a06c44]) Ensure NamedScope#any? uses COUNT query wherever possible. [#680 state:resolved]

    Signed-off-by: Pratik Naik

    http://github.com/rails/rails/co...

    July 23rd, 2008 @ 12:05 PM

  4. Paweł Kondzior
    Paweł Kondzior

    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.

    August 6th, 2008 @ 08:55 PM

  5. Tarmo Tänav
    Tarmo Tänav

    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.

    August 7th, 2008 @ 08:44 AM