2011-08-30 4 views
1

J'essaie d'utiliser set_table_name pour utiliser un modèle générique sur plusieurs tables différentes. Cependant, il semble que le nom de set_table ne fonctionne qu'une fois par session d'application sur la classe. Par exemple, dans un 3 rails console (Ruby 1.8.7) ce qui suit se produit:set_table_name ne fonctionne qu'une seule fois?

GenericModel.set_table_name "table_a" 
puts GenericModel.table_name # prints table_a 
pp GenericModel.column_names # prints the columns associated with table_a 

GenericModel.set_table_name "table_b" 
puts GenericModel.table_name # prints table_b 
pp GenericModel.column_names # still prints the columns associated with table_a 

Actuellement, la solution que j'ai trouvé est d'ajouter également .from (table_b) afin que les requêtes n'erreur pas avec ' table_b.id n'existe pas! ' car la requête pense toujours que c'est FROM table_a.

D'autres personnes peuvent-elles reproduire le problème? Est-ce le comportement prévu de set_table_name?

MISE À JOUR

Ajout

Model.reset_column_information 

après set_table_name force le modèle pour travailler comme je le pense. Référence trouvée dans http://ar.rubyonrails.org/classes/ActiveRecord/Base.html#M000368

Répondre

1

Ceci est probablement une limitation non documentée. Une fois que le SHOW FIELDS FROM a été exécuté, d'où proviennent les résultats de column_names, il est généralement mis en cache, au moins pour la durée de la demande. Si vous le devez, essayez d'utiliser la méthode reload! de la console pour réinitialiser les éléments.

+0

Je pense que vous êtes sur la bonne voie. La raison en est que mon application fonctionne correctement en mode développement. Toutefois, lors de l'exécution de tests ou du déploiement en production, des erreurs se produisent en raison d'un nom de table incorrect dans le SQL. Cela est logique car la production cache probablement beaucoup plus que le développement. – Tron

+2

La réponse à ce problème est: Model.reset_column_information – Tron

+0

Trouvé dans http://ar.rubyonrails.org/classes/ActiveRecord/Base.html#M000368 – Tron

Questions connexes