web-dev-qa-db-fra.com

Rails 4: organiser Rails modèles dans un sous-chemin sans modèles d'espaces de noms?)

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 .

73
Rubytastic

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>")

MISE À JOUR pour Rails 4.1+

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.

MISE À JOUR

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.

106
pdobb