Hola Gente,

Me pregunto cuantos de ustedes han necesitado hacer esto? y a cuantos,
usando Rails 2.3.2, les ha fallado?

Paso a explicar el problema, con unos modelos.

Tengo Project que puede o no estar live o draft.
En el modelo, defino dos named scopes para simplificar obtener los resultados:

Project.live.count #=> 1
Project.draft.count #=> 3

Todo bien ahi.

Ahora, cada Project pertenece a un Client. y a la vez, un client
pertenece a una Industry.

Por ende, si hiciera asi:

i = Industry.first
i.projects.count #=> 4

Pero:

i.projects.live.count #=> Error.

Esto se debe a que count intenta hacer un count sobre "*" y por
trabajar sobre uniones, eso falla.
El problema se resuelve facilmente indicando a count que campo quiero
que cuente:

i.projects.live.count(:id) #=> 1

Esto se rompio en Rails 2.3.2, pero funcionaba bien en versiones
anteriores (como la 2.1.2).

Como ven, se resuelve, pero es tedioso poner un field(:id) o :all
todas las veces.

Hay un ticket en Lighthouse pero me parece que siguen discutiendo sobre eso:

https://rails.lighthouseapp.com/projects/8994/tickets/2189

Pero no hay indicaciones de que se resuelva no se logre integrar en el
proximo bugfix de 2.3

El parche propuesto es ese ticket no resuelve enteramente el problema
si por alguna chance hubiera "uniq => true" en una de tus relaciones.

Asi que, que tal esto:

http://gist.github.com/137036

La unica diferencia con respecto al parche original es que contempla
los casos de DISTINCT y usa primary_key (que generalmente es id) en
lugar de *.

Alguno que haya tenido este problema y tuvo que usar count(:all) o
(:id), podria probar el monkey patch del Gist?

Basicalmente, si usan Will Paginate para algun listing con un
name_scope, deberia fallar sin el count(:all), y con el parche
funcionar.

Muchas gracias desde ya.
-- 
Luis Lavena
AREA 17
-
Perfection in design is achieved not when there is nothing more to add,
but rather when there is nothing more to take away.
Antoine de Saint-Exupéry
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a