En el entorno de desarrollo, cuando se usa zeitwerk, cada cambio en el código ruby necesita reiniciar el servidor, porque zeitwerk no carga las clases definidas en mygem. Tengo una joya, usada por mi empresa que usa modelos de rieles. Y algunos de esos modelos se reabren y agregamos algunos métodos.
Tengo el siguiente modelo en mi aplicación.
require_dependency("#{Mygem::Engine.root.join('app','models','identification.rb')}") class Identification include Cacheable has_paper_trail def some method end endY el siguiente modelo en mygem, ruta de mi gema app/models/identification.rb:
class Identification < ApplicationRecord self.table_name = 'pub_identification' belongs_to :city, foreign_key: 'idcity' endPero si cambio algo en mi código, necesito reiniciar mi servidor, porque el modelo de mis gemas no se vuelve a abrir. me sale el error:
undefined local variable or method `has_paper_trail' for Identification:Class El método has_paper_trail es un método de mygem. Y solo funciona si reinicio. ¿Algún consejo para esto?
EDITAR:
Estructura de la gema:
mygem/ ├─ app/ │ ├─ models/ ├─ config/ ├─ lib/No puede tener dos archivos que definan la misma constante en las rutas de carga automática.
Su motor define un modelo y la aplicación quiere decorarlo. Para este caso de uso, consulte esta documentación .