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
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
La réponse à ce problème est: Model.reset_column_information – Tron
Trouvé dans http://ar.rubyonrails.org/classes/ActiveRecord/Base.html#M000368 – Tron