Carlos Brando

Nome do Jogo

Edge Rails: Método count do ActiveRecord não inclui um alias para associações

Digamos que temos a seguinte associação has_many :through:

class Author < ActiveRecord::Base
  has_many :authorships
  has_many :books, :through => :authorships
end

Ao procurar por um livro você pode incluir a autoria em sua busca:

author.books.find(:all, :include => :authorships,
                  :conditions => ["authorships.primary = ?", true])

Isto funciona muito bem, sem erros. Mas tente fazer o mesmo com o método count:

author.books.count(:include => :authorships,
                   :conditions => ["authorships.primary = ?", true])

Temos um erro. Isto acontece porque a tabela authorships foi incluída duas vezes na mesma query.

O método find é mais esperto, porque ele cria um apelido para a tabela, coisa que o método count não faz. Eu sei que o exemplo dado não é muito bom, mas é apenas para tentar mostrar o problema com o método count.

Esta falha foi corrigida. Agora o método count se comporta exatamente como o método find em relação ao :include.


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