Serait-il possible d'avoir quelque chose comme ça?
app/models/
app/models/users/user.rb
app/models/users/education.rb
Le but est de mieux organiser le dossier /app/models, mais sans avoir à nommer les modèles.
Une question sans réponse pour Rails 3 est ici: Rails 3.2.9 et modèles dans les sous-dossiers .
La spécification de nom_table avec des espaces de noms semble fonctionner (voir sous-dossier du modèle Rails 4 ), mais je veux le faire sans espace de noms .
Par défaut, Rails n'ajoute pas de sous-dossiers du répertoire models au chemin de chargement automatique. C'est pourquoi il ne peut trouver que les modèles avec espace de noms - l'espace de noms illumine le sous-répertoire dans lequel chercher.
Pour ajouter tous les sous-dossiers de app/models au chemin de chargement automatique, ajoutez ce qui suit à config/application.rb:
config.autoload_paths += Dir[Rails.root.join("app", "models", "{*/}")]
Ou, si vous avez un répertoire app/models plus complexe, la méthode ci-dessus de regrouper tous les sous-dossiers de app/models peut ne pas fonctionner correctement. Dans ce cas, vous pouvez contourner ce problème en étant un peu plus explicite et en ajoutant uniquement les sous-dossiers que vous spécifiez:
config.autoload_paths += Rails.root.join("app", "models", "<my_subfolder_name1>")
config.autoload_paths += Rails.root.join("app", "models", "<my_subfolder_name2>")
Depuis Rails 4.1, le générateur d'application ne comprend pas config.autoload_paths
par défaut. Donc, notez que ce qui précède appartient vraiment à config/application.rb.
Correction des exemples de chemin de chargement automatique dans le code ci-dessus pour utiliser {*/}
au lieu de {**}
. N'oubliez pas de lire commentaire de muichkine pour plus de détails à ce sujet.