Carlos Brando

Nome do Jogo

Edge Rails: Correção de bug no método count do ActiveRecord

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.


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.

Comments