32 votes

Est-ce une mauvaise idée de diviser les modèles en répertoires?

J'ai plus de 100 modèles dans mon application rails, et juste pour l'organisation, je les divise en dossiers, tous toujours sous le dossier du modèle principal, juste pour simplifier la navigation sur le projet et voir les fichiers qui y sont liés.

Est-ce une mauvaise idée? Quelle est la manière de faire les rails?

62voto

vonconrad Points 14378

Non, ce n'est pas une mauvaise idée. Beaucoup de gens le faire et je ne pouvais pas vivre sans elle dans les applications de grande taille.

Il y a deux façons de le faire:

La première est de simplement déplacer vos modèles. Vous, cependant, ont à dire à Rails de charger le rétif modèles (comme elle ne sait pas où ils sont). Quelque chose comme ceci devrait faire l'affaire:

# In config/application.rb
module YourApp
  class Application < Rails::Application
    # Other config options

    config.autoload_paths << Dir["#{Rails.root}/app/models/*"]
  end
end

La première méthode est facile, mais n'est pas vraiment la meilleure façon. La deuxième façon consiste à namespacing vos modèles avec des groupes qu'ils sont dans. Cela signifie qu'au lieu d'avoir User et UserGroup et UserPermissions, vous avez User, User::Group et User::Permission.

Pour l'utiliser, générer un modèle comme ceci: rails generate model User::Group. Rails de créer automatiquement tous les dossiers pour vous. Un avantage supplémentaire est que, avec cette approche, vous n'aurez pas à épeler le nom du modèle pour les associations au sein d'un espace de noms:

class User < ActiveRecord::Base
  belongs_to :group # Rails will detect User::Group as it's in the same namespace
end

class User::Group < ActiveRecord::Base
  has_many :users
end

Vous pouvez spécifier toutefois, de nombreux niveaux de namespacing que vous voulez, donc User::Group::Permission serait possible.

16voto

pathdependent Points 271

Pour 100 modèles, c'est pratiquement une exigence. 100 modèles sont bruyants dans un répertoire.

Essayez ceci pour avoir une idée de la Rails Way (tm)

 rails new MultiDirectoryExample
cd MultiDirectoryExample
rails generate scaffold User::Photo description:string
 

Regardez la sortie du script et affichez les fichiers générés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X