J'étends une classe (qui est un plug-in) en incluant un module, cela se fait dans un initialiseur.Comment étendre une classe à partir d'un initialiseur et la recharger dans un environnement de développement?
require 'qwerty/core/user'
User.send :include, Qwerty::Core::Extensions::User
Cependant dans le développement avant chaque demande (et après reload! Est appelé dans la console) tous les modèles sont rechargées, mais parce que les initialiseurs ne sont pas exécutés à nouveau le module ne sont pas compris. Laisser un modèle avec des 'parties manquantes'.
Parce que le modèle est un plugin il ne semble pas judicieux d'inclure le code directement dans la classe qui serait l'approche habituelle.
Pour l'instant j'ai simplement ajouté un before_filter qui comprend le module que si l'environnement de développement. Mais je copier/coller et ont le code en double dans le contrôleur initialiseur et de l'application.
# Class extensions in initalizers are over-writtern each request
def development_loading
if RAILS_ENV == 'development'
User.send :include, Qwerty::Core::Extensions::User
end
end
Y a-t-il un meilleur moyen?
Comme une note de côté le plug-in est à moi, donc je pourrais ajouter du code pour, mais les extensions détenues dans le module ne sont pas toujours présents ...
Cela a fonctionné pour moi, mais dans application.rb (rails 3.0.20), pas environnement.rb – tekniklr
Ceci est parfaitement fonctionne dans les rails 4 si l'ajouter à engine.rb dans les rails moteur. Merci! –