Modelos carris counter_cache inicialização coluna
-
12-09-2019 - |
Pergunta
Eu estou usando rspec para testar e cenários Hornsby para gráficos de objetos usados ??em testes.
É uma boa prática para colunas de cache contra initialize para 0 valor em vez de deixá-los não inicializado (zero)? Ou devo definir valor padrão em migrações que criam essas colunas de cache contador?
Solução
Sim, você deve definir o valor padrão. Caso contrário, você tem que operações especiais caso matemática para NULLs punho.
Vamos dizer que você tinha um array de objetos postais e você quisesse obter somar o número de comentários.
Se você inicializar a @posts.sum(&:comment_count)
zero, mas se você não fazê-lo pode não porque ele vai falhar em nada.
Eu recomendo definir sua coluna como esta:
add_column :posts, :comments_count, :integer, :default => 0, :null => false
Outras dicas
Rails simplesmente enviar o seguinte SQL
UPDATE posts SET comment_count = comment_count + 1, WHERE id IN (10, 15)
Assim, ou o DB sabe que indefinido +1 == 1 ou Rails faz alguma inicialização próprio. Em ambos os casos este parece ser um comportamento estável para mim, então não colocá-las a zero e salvar o trabalho. Desde que você não será capaz de ver se você fez a inicialização de qualquer maneira (ele funciona exatamente o mesmo sem) como você vai testá-lo. E se não é garantido para ser inicializado por você o que você realmente ganhou em termos de futuro prova.