Existe um bug no método count do ActiveRecord quando usamos uma associação has_many em conjunto com a opção :limit ou :offset. Vejamos um exemplo:
class Post < ActiveRecord::Base
has_many :comments, :limit=> 2
end
No código acima quando tentarmos recuperar os comentários de um post, apenas 2 comentários devem ser retornados.
post.comments.length # => 2
# Veja o SQL usado:
# SELECT * FROM "comments" WHERE
# ("comments".post_id = 1) LIMIT 2
Mas, ao usarmos o método count:
post.comments.count # => 3
# Veja o SQL usado:
# SELECT count(*) AS count_all FROM "comments" WHERE
# ("comments".post_id = 1)
Como você pode ver o erro ocorre porque a clausula LIMIT 2 não foi incluída na query do SQL.
Obviamente isto já foi corrigido no Edge Rails e já estará funcionando no Rails 2.2.
# SELECT * AS count_all FROM “comments” WHERE …
acho que vc quis dizer
# SELECT count(*) AS count_all FROM “comments” WHERE …
Na verdade a query do primeiro exemplo deveria ser:
SELECT * FROM “comments” WHERE…