Carriles Modelos counter_cache inicialización de la columna
-
12-09-2019 - |
Pregunta
Estoy usando rspec para la prueba y Hornsby escenarios para gráficos de objetos utilizados en las pruebas.
¿Es una buena práctica para inicializar columnas de caché contador a 0 el valor en lugar de dejarlos sin inicializar (cero)? O debería definir el valor por defecto de las migraciones que crean esas columnas de caché de venta libre?
Solución
Sí, se debe establecer el valor predeterminado. De lo contrario, usted tiene que operaciones especiales caso de matemáticas para manejar los nulos.
Vamos a decir que tenía una matriz de objetos postales y que quería conseguir sumar el número de comentarios.
Si inicializa a cero @posts.sum(&:comment_count)
será, pero si no lo hace puede ser que no, ya que se producirá un error en cero.
Yo recomiendo la definición de su columna de la siguiente manera:
add_column :posts, :comments_count, :integer, :default => 0, :null => false
Otros consejos
Rieles sólo tiene que enviar el siguiente código SQL
UPDATE posts SET comment_count = comment_count + 1, WHERE id IN (10, 15)
Así que, o el PP sabe que no definido 1 == 1 o rieles hace algo de inicialización de su propia. En cualquiera de los casos esto parece un comportamiento estable a mí, así que no se los puso a cero y guardar el trabajo. Dado que usted no será capaz de ver si lo hizo la inicialización de todos modos (que funciona de la misma sin ella) cómo va a probarlo. Y si no se garantiza que ser inicializado por lo que realmente han ganado en términos de futuro de pruebas.