Tengo problemas para hacer que Rails (3.1.3) cargue algunas de mis subclases ActiveRecord en la inicialización de la aplicación. Esta es la estructura de directorios que tengo:Cargar Subclases en Rails Inicialización
- models
- class1.rb # Class1 < ActiveRecord::Base
- class1s
- subclass1.rb # Subclass1 < Class1
- subclass2.rb # Subclass2 < Class1
que estoy tratando de hacer uso de Class1.subclasses
, pero sigue regresando []
. Agregar #{config.root}/app/models/class1s
a config.autoload_paths
no ayuda porque esas clases tienen una carga lenta y nada hace referencia a las subclases antes de hacer una llamada al subclasses
, por lo que todavía están cargados. Agregar la ruta a config.eager_load_paths
tampoco parece funcionar, y su comportamiento se basa en la configuración config.cache_classes
que generalmente es diferente en desarrollo y producción.
Me gustaría ser capaz de poner en marcha la consola carriles y ver:
> Class1.subclasses
=> [Subclass1, Subclass2]
En este momento este es el comportamiento que veo:
> Class1.subclasses
=> []
> Subclass1
=> Subclass1
> Class1.subclasses
=> [Subclass1]
> Subclass2
=> Subclass2
> Class1.subclasses
=> [Subclass1, Subclass2]
En este momento estoy reducido a poner esta en el fondo de mi definición clase 1 para obtener todas las subclases para cargar en cuando accedo a la clase Class1:
ruby_files_pattern = File.join(Rails.application.config.root, "app", "models", "class1s", "**", "*.rb")
Dir.glob(ruby_files_pattern).each do |file|
ActiveSupport::Dependencies.require_or_load(file)
end
Hace el trabajo, pero me siento sucio haciéndolo. Cualquier pensamiento sería muy apreciado.