ruby-on-rails namespaces ruby-on-rails-4 models subfolder

ruby on rails - Rails 4: ¿organiza modelos de rieles en subruta sin modelos de espaciado de nombres?



ruby-on-rails namespaces (1)

De forma predeterminada, Rails no agrega subcarpetas del directorio de modelos a la ruta de autocarga. Por eso solo puede encontrar modelos con espacios de nombres: el espacio de nombres ilumina el subdirectorio para buscar.

Para agregar todas las subcarpetas de la aplicación / modelos a la ruta de autocarga, agregue lo siguiente a config / application.rb :

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

O bien, si tiene un directorio de aplicaciones / modelos más complejo, el método anterior de agrupar juntas todas las subcarpetas de las aplicaciones / modelos puede no funcionar correctamente. En ese 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 en config / application.rb .

ACTUALIZAR

Se corrigieron los ejemplos de rutas de autocarga en el código anterior para usar {*/} lugar de {**} . Asegúrate de leer el comentario de muichkine para detalles sobre esto.

¿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 cambiar el nombre de 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 (ver la subcarpeta del modelo Rails 4 ), pero quiero hacer esto sin un espacio de nombres .