Rotaie Modelli counter_cache inizializzazione colonna
-
12-09-2019 - |
Domanda
Sto usando RSpec per il test e Hornsby scenari per grafi di oggetti utilizzati nei test.
E 'buona pratica per inizializzare il contatore colonne di cache a 0 il valore invece di lasciare loro non inizializzata (zero)? O dovrei definire il valore di default nelle migrazioni che creano quelle colonne di cache contatore?
Soluzione
Sì, è necessario impostare il valore di default. In caso contrario, si deve operazioni speciali caso matematiche per gestire i NULL.
Diciamo che ha avuto un array di oggetti postali e si voleva ottenere sommare il numero di commenti.
Se si inizializza a @posts.sum(&:comment_count)
zero, ma se non si potrebbe non perché avrà esito negativo pari a zero.
Vi consiglio che definisce la vostra colonna in questo modo:
add_column :posts, :comments_count, :integer, :default => 0, :null => false
Altri suggerimenti
Rails devono semplicemente inviare il seguente SQL
UPDATE posts SET comment_count = comment_count + 1, WHERE id IN (10, 15)
Quindi, o il DB sa che indefinita 1 == 1 o Rails fa un po 'di inizializzazione del proprio. In entrambi i casi questo mi sembra un comportamento stabile a me, in modo da non metterli a zero e salvare il lavoro. Dal momento che non sarà in grado di vedere se avete fatto l'inizializzazione comunque (funziona lo stesso senza) come potrete provarlo. E se non è garantito per essere inizializzato da voi ciò che avete guadagnato davvero in termini di futuro proofing.