Extiendo una clase (que está en un complemento) incluyendo un módulo, esto se hace en un inicializador.¿Cómo extender una clase desde un inicializador y hacer que se vuelva a cargar en el entorno de desarrollo?
require 'qwerty/core/user'
User.send :include, Qwerty::Core::Extensions::User
Sin embargo, en el desarrollo antes de cada petición (y después de recarga! Que se llama en la consola) todos los modelos se vuelven a cargar, pero debido a que los inicializadores no se ejecutan de nuevo el módulo no está incluido. Dejando un modelo con 'partes faltantes'.
Como el modelo está en un complemento, no parece aconsejable incluir el código directamente en la clase, que sería el enfoque habitual.
Por ahora simplemente he agregado un before_filter que incluye el módulo si está en el entorno de desarrollo. Pero tengo copiar/pegar y tener código duplicado en el controlador de inicializador y aplicación.
# 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
¿Hay una manera mejor?
Como nota al margen el plugin es mío, así que podría agregar código a ella, pero las extensiones realizadas en el módulo no puede estar siempre presente ...
Esto funcionó para mí, pero en application.rb (rieles 3.0.20), no environment.rb – tekniklr
Esto funciona perfectamente en rieles 4 si agrega esto a engine.rb en el motor de rieles. ¡Gracias! –