Accesso alla cache del contatore Ruby
-
22-09-2019 - |
Domanda
Sto giocando con un fork di act_as_taggable_on_steroids come esercizio di apprendimento.La versione che sto guardando fa alcune cose che non capisco per calcolare i conteggi dei tag.Quindi ho pensato di realizzare una versione utilizzando PORC (Plain Old Rails Counters):
class Tagging < ActiveRecord::Base #:nodoc:
belongs_to :tag, :counter_cache => "tagging_counter_cache"
...
Pensavo che si accedesse a tagging_counter_cache in modo trasparente quando accedo a tag.taggings.count ma a quanto pare no?Devo davvero accedere esplicitamente a tag.tagging_counter_cache?
>> tag.taggings.count
SQL (0.7ms) SELECT count(*) AS count_all FROM `taggings` WHERE (`taggings`.tag_id = 16)
Idem per la taglia.
Sarebbe bello se fosse così, ma volevo solo controllare.
Soluzione
Chiamando #size sulla collezione
>> tag.taggings.size
restituirà il valore nella cache del contatore.Chiamando #conte
>> tag.taggings.count
forzerà sempre una chiamata SQL per ottenere il conteggio più recente.
Altri suggerimenti
Hai creato la colonna associata nella migrazione? Ha bisogno di un posto per memorizzare la cache.