2

J'utilise acts-as-taggable-on gem v.2.4.1 avec rails v.3.2.13 et ruby ​​1.9.3p392. Je viens de mettre à jour la gem de la v.2.2.1 vers la v.2.4.1 et de la suite these instructions J'ai ajouté une colonne 'cached_tag_list' à ma base de données. La colonne semble se mettre à jour comme prévu lorsqu'un enregistrement est sauvegardé/mis à jour, mais lorsque j'essaie de récupérer des enregistrements étiquetés, je peux toujours voir les requêtes de balises SQL en cours d'exécution (et non récupérer les balises mises en cache). Ceci est mon code à mon avis:La mise en cache d'actions-sur-taggables ne semble pas fonctionner

<% if !tape.tag_list.empty? %> 
    <% for tag in tape.tags %> 
     <span><%= tag.name %></span> 
    <% end %> 
<% end %> 

Mon modèle a la ligne suivante:

acts_as_taggable_on :tags 

Et voici une capture d'écran de newrelic montrant les requêtes SQL sont exécutées même si ces enregistrements ont sauvé des chaînes de tag dans la colonne de base de données '' cached_tag_list ''. SQL queries performed, caching not working

Des idées pour activer la mise en cache avec cette gemme?

Merci, Alex

+0

avoir une lecture de http://stackoverflow.com/questions/3946783/how-to-cache-tags-with-acts- as-taggable-on – David

+0

@David Je ne pense pas que la réponse liée soit pertinente dans mon cas: 1) Mon code de migration posté ci-dessus est le même avec la réponse dans le lien que vous fournissez et fonctionne bien donc ce n'est pas le problème (en fait j'ai utilisé le code de cette question). 2) Je n'utilise pas de balises possédées donc ce n'est pas le problème non plus. En tout cas, merci pour votre réponse. – Alex

Répondre

1

Jusqu'à ce que ce bug est corrigé, voici une solution que j'ai mis en place:

<% if tape.cached_tag_list != "" %> 
     <% for tag in tape.cached_tag_list.split(', ') %> 
      <span><%= tag %></span> 
     <% end %> 
    <% end %> 

Depuis la colonne cached_tag_list est correctement mis à jour chaque fois qu'un enregistrement est sauvegardé J'utilise pour obtenir les balises de chaque enregistrement sans appeler des requêtes SQL supplémentaires, juste une. Puisque la colonne cached_tag_list stocke une chaîne avec des balises séparées par des virgules, j'utilise la fonction split() pour obtenir chacune d'entre elles.

Je partage ce dans le cas où cela est utile à quelqu'un d'autre ..

+0

est 'cached_tag_list' une colonne dans la table parente? ou est-ce purement une méthode? – ahnbizcad