Je veux écrire un cache ActiveRecord personnalisé, juste pour find_by_id
maintenant. Pour ce faire, je veux écraser la méthode find, quand un seul entier est utilisé, utilisez mon cache, sinon utilisez l'implémentation par défaut. Tout fonctionne, sauf dans le cas d'une association avec d'autres instances de X, par exemple. une relation parent-enfant:Cache et associations Custom Rails - écrasement ActiveRecord.find
has_many :x_children
has_many :children, :class_name => "X", :through => :x_children
Quand j'appelle X.find(1).children
je reçois un Enumerator
au lieu d'un Array
, ce qui est mauvais depuis que je l'utilise parfois l'opérateur [].
Même en utilisant le recenseur ne fonctionne pas bien - quand itérer la dernière entrée je reçois:
NoMethodError: undefined method `call' for :all:Symbol
Toute aide sera très appréciée
Des explications complémentaires:
XCache est juste un classe qui met en cache les instances d'ActiveRecord. Une mise en œuvre peut être simpliste
class XCache
@@cache = {}
def self.[id]
return @@cache[id] ||= X.find(id)
end
end
(Une implémentation plus avancée peut inclure l'expiration du temps, Memcached etc., et une solution plus générique peut prendre en charge plusieurs classes de modèle).
Je ne pense pas que mon problème est lié à la mise en œuvre du cache (mais je peux me tromper)
Que voulez-vous voulez réaliser ici? Une bibliothèque à usage général ou une solution à un problème spécifique? –
Pourriez-vous expliquer ce qu'est le 'XCache'? Je recherche sur internet, mais je n'ai rien trouvé. Si vous avez implémenté vous-même (et si ce n'est pas trop de code), ajoutez simplement ce code à votre question. – mliebelt
ne sait pas si cela aide, mais le fait est que [Enregistrement actif met en cache les enregistrements associés par défaut] (http://www.kickasslabs.com/2009/04/23/rails-gotcha-activerecord-caches-associated- records-by-default /) –