@Mauricio eu originalmente tinha feito o find sem :select e o comportamento é igual, fiz com :select apenas para não poluir com informações desnecessárias e ficar mais claro na hora de explicar minha dúvida.
@Sobrinho o default desse campo já está como 0, eu gostaria de fazer a comparação pq em algum momento vou ter que fazer um decrement_counter mas não quero que o valor fique negativo. .empty? não sei se vai funcionar pq ele retorna um NilClass, e não quero utilizar do relacionamento para contar registros.
@Rodrigo o counter_cache veio como opção para evitar a consulta pq a tabela emplacamentos tem milhões de registros. Incrementar e decremetar o contador fica mais simples que consultar na tabela.
> @Mauricio eu originalmente tinha feito o find sem :select e o comportamento
> é igual, fiz com :select apenas para não poluir com informações
> desnecessárias e ficar mais claro na hora de explicar minha dúvida.
> @Sobrinho o default desse campo já está como 0, eu gostaria de fazer a
> comparação pq em algum momento vou ter que fazer um decrement_counter mas
> não quero que o valor fique negativo. .empty? não sei se vai funcionar pq
> ele retorna um NilClass, e não quero utilizar do relacionamento para contar
> registros.
> @Rodrigo o counter_cache veio como opção para evitar a consulta pq a tabela
> emplacamentos tem milhões de registros. Incrementar e decremetar o contador
> fica mais simples que consultar na tabela.
Eu sei disso, o que quero dizer que quando vc não possui counter cache o
rails fará assim:
select count(*) bla bla bla
e quando vc possui a coluna de counter cache o rails não fará select e sim
usar o valor da coluna (counter_column) .
por isso eu disse para fazer modelo.emplacamentos.size
Abraços.
-- Rodrigo Pinto
"Usar software livre é igual a usar uma cirola. Me deixa com a mesma
sensação de liberdade."
@Rodrigo exatamente, o counter_cache não fará uma consulta, pois é um atributo do próprio objeto. Mas modelo.emplacamentos.size qus vc sugestionou não irá disparar uma query através do relacionamento? Isso que estou tentando evitar.
> @Rodrigo exatamente, o counter_cache não fará uma consulta, pois é um
> atributo do próprio objeto. Mas modelo.emplacamentos.size qus vc sugestionou
> não irá disparar uma query através do relacionamento? Isso que estou
> tentando evitar.
Não se vc tiver implementado o counter_cache... .
O COUNTER_CACHE serve exatamente para não disparar toda hora a consulta o
RAILS faz a mágica...
Vc já tentou ? olho no console para ver se ele continua disparando o sql ?
não digo 100% mas acho que estou 99% quase de certeza em relação a isto
implementei dois desse essa semana para ganhar performance..
se vc der uma olhada nos docs e procurar counter-cache no railscast verá ..
Abraços
-- Rodrigo Pinto
"Usar software livre é igual a usar uma cirola. Me deixa com a mesma
sensação de liberdade."
@Rodrigo certo, vou tentar sua sugestão amanhã e já estou buscando informações sobre o uso do counter_cache, na verdade essa é a primeira vez que uso counter_cache, por isso vou verificar se alguma coisa não está mal definida. E por isso perguntei quanto ao disparo da query amanhã terei a resposta.
Mas a dúvida inicial ainda é como comparar o valor de um "atributo" counter_cache se ele retorna um NilClass? Será que é proposital esse retorno, ou é algum erro de má configuração?
> @Rodrigo certo, vou tentar sua sugestão amanhã e já estou buscando
> informações sobre o uso do counter_cache, na verdade essa é a primeira vez
> que uso counter_cache, por isso vou verificar se alguma coisa não está mal
> definida. E por isso perguntei quanto ao disparo da query amanhã terei a
> resposta.
> Mas a dúvida inicial ainda é como comparar o valor de um "atributo"
> counter_cache se ele retorna um NilClass? Será que é proposital esse
> retorno, ou é algum erro de má configuração?
> @Rodrigo certo, vou tentar sua sugestão amanhã e já estou buscando
> informações sobre o uso do counter_cache, na verdade essa é a primeira vez
> que uso counter_cache, por isso vou verificar se alguma coisa não está mal
> definida. E por isso perguntei quanto ao disparo da query amanhã terei a
> resposta.
> Mas a dúvida inicial ainda é como comparar o valor de um "atributo"
> counter_cache se ele retorna um NilClass? Será que é proposital esse
> retorno, ou é algum erro de má configuração?
-- Rodrigo Pinto
"Usar software livre é igual a usar uma cirola. Me deixa com a mesma
sensação de liberdade."
@Rodrigo acabei de testar a sua sugestão (modelo.emplacamentos.size) e realmente não dispara uma query e retorna o valor de emplacamentos_count, resolvendo meu problema.