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:
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.
Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.