Rails 4: ¿organizar modelos de rails en subtrayecto sin modelos de espacio de nombres?


Sería posible tener algo como esto?

app/models/
app/models/users/user.rb
app/models/users/education.rb

El objetivo es organizar mejor la carpeta /app/models, pero sin tener que crear un espacio de nombres para los modelos.

Una pregunta sin respuesta para Rails 3 está aquí: Rails 3.2.9 y modelos en subcarpetas.

Especificar table_name con espacios de nombres parece funcionar (consulte la subcarpeta del modelo Rails 4 ), peroQuiero hacer esto sin un espacio de nombres .

Author: pdobb, 2013-09-21

1 answers

Por defecto, Rails no añade subcarpetas del directorio models a la ruta de autoload. Es por eso que solo puede encontrar modelos con espacio de nombres the el espacio de nombres ilumina el subdirectorio para buscar.

Para agregar todas las subcarpetas de app / models a la ruta de carga automática, agregue lo siguiente a configuración / aplicación.rb:

config.autoload_paths += Dir[Rails.root.join("app", "models", "{*/}")]

O, si tiene un directorio más complejo app/models, el método anterior de agrupar todas las subcarpetas de app/models puede no funcionar correctamente. En cuyo caso, puede evitar esto siendo un poco más explícito y solo agregando las subcarpetas que especifique:

config.autoload_paths += Rails.root.join("app", "models", "<my_subfolder_name1>")
config.autoload_paths += Rails.root.join("app", "models", "<my_subfolder_name2>")

ACTUALIZACIÓN para Rails 4.1 +

A partir de Rails 4.1, el generador de aplicaciones no incluye config.autoload_paths por defecto. Por lo tanto, tenga en cuenta que lo anterior realmente pertenece a config/application.rb .

ACTUALIZACIÓN

Se corrigieron ejemplos de rutas de carga automática en el código anterior para usar {*/} en lugar de {**}. Asegúrese de leer comentario de muichkine para más detalles sobre esto.

 101
Author: pdobb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-02 00:29:18