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.
4 Comentários em "Edge Rails: Correção de bug no método count do ActiveRecord"
# 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…
[...] dizer com certeza que a correção do bug no método count do ActiveRecord, conforme expliquei aqui, está inclusa neste [...]
[...] da correção do bug no método count do ActiveRecord, conforme mencionei no post anterior. Outra correção de segurança vem com com a nova versão [...]
Deixe o seu comentário!