bonjour,

J'ai une class Produits avec une catégorie et un attribut polymorphique 
details_info, qui selon la catégorie recherche dans une table ou une autre  
pour 
obtenir les détails

Class Product
category
details_info

end

Class DetailsInfo
...
end

Class Pencil

  include DetailsInfo
type
color
end

Class Notebook

  include DetailsInfo
size
...
end

et pour afficher les produits
prds = Products.all
prds.each do |pr|

if pr.category == 'pencil'
DetailsInfo.table_name = 'pencil'

else if pr.category == 'notebook'

DetailsInfo.table_name = 'notebook'
end

end

(juste une sorte d'algo

Tout cela fonctionnait très bien mais depuis rails > 4.2, ca ne marche plus.
La première fois que pr.details_info est appelé, il semble que le nom de la 
table est mise en cache quelque part, et ensuite tous les autres produits 
utilisent 
les mêmes table_name. Quand je vérifie lors de la boucle, je vois que 
DetailsInfo.table_name est toujours correct, mais pourtant quand 
pr.details_info est appelé, il utilis le premier table_name qui a été 
utilisé. Je peux aussi voir que la méthode table_name est appelée à chaque 
étape 
de la boucle, et elle retourne le bon nom de table, mais toujours, la
 requête SQL sur la mauvaise table.

Comment puis-je réinitialiser cela? J'ai essayé beaucoup de choses comme 
vider association_cache, et aussi différentes choses avec 
reflect_on_all_associations, reset_column_information, reload, ...

merci

-- 
-- 
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de 
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse 
railsfrance@googlegroups.com
Pour résilier votre abonnement envoyez un e-mail à l'adresse 
railsfrance-unsubscr...@googlegroups.com
--- 
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes 
Railsfrance.
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, 
envoyez un e-mail à l'adresse railsfrance+unsubscr...@googlegroups.com.
Pour plus d'options, visitez le site https://groups.google.com/d/optout .

Répondre à