Ruby on Rails
Conventions de nommage
Recherche…
Contrôleurs
Les noms de classe de contrôleur sont pluralisés. La raison en est que le contrôleur contrôle plusieurs instances d'instance d'objet.
Par exemple : OrdersController
serait le contrôleur pour une table de orders
. Rails recherchera alors la définition de la classe dans un fichier appelé orders_controller.rb
dans le orders_controller.rb
/app/controllers
.
Par exemple : PostsController
serait le contrôleur pour une table de posts
.
Si le nom de la classe du contrôleur comporte plusieurs mots en majuscules, le nom de la table est supposé avoir des traits de soulignement entre ces mots.
Par exemple: Si un contrôleur s'appelle PendingOrdersController
le nom de fichier supposé pour ce contrôleur sera pending_orders_controller.rb
.
Des modèles
Le modèle est nommé en utilisant la convention de dénomination de classe de MixedCase ininterrompue et est toujours le singulier du nom de la table.
Par exemple : Si une table était nommée orders
, le modèle associé serait nommé Order
Par exemple : si une table était nommée posts
, le modèle associé serait nommé Post
Rails recherchera alors la définition de la classe dans un fichier appelé order.rb
dans le order.rb
/app/models
.
Si le nom de la classe de modèle comporte plusieurs mots en majuscules, le nom de la table est supposé avoir des traits de soulignement entre ces mots.
Par exemple: si un modèle s'appelle BlogPost
le nom de table supposé sera blog_posts
.
Vues et mises en page
Lorsqu'une action de contrôleur est rendue, Rails tente de trouver une disposition et une vue correspondantes en fonction du nom du contrôleur.
Les vues et les dispositions sont placées dans le répertoire app/views
.
Étant donné une requête à l'action d' PeopleController#index
, Rails recherchera:
- la mise en page a appelé les
people
dansapp/views/layouts/
(ouapplication
si aucune correspondance n'est trouvée) - une vue appelée
index.html.erb
dansapp/views/people/
par défaut - si vous souhaitez rendre un autre fichier appelé
index_new.html.erb
vous devez écrire le code correspondant dans l'action d'PeopleController#index
commerender 'index_new'
- nous pouvons définir différentes
layouts
pour chaqueaction
en écrivantrender 'index_new', layout: 'your_layout_name'
Noms de fichiers et chargement automatique
Les fichiers Rails - et les fichiers Ruby en général - doivent être nommés avec les lower_snake_case
fichiers lower_snake_case
. Par exemple
app/controllers/application_controller.rb
est le fichier qui contient la définition de la classe ApplicationController
. Notez que même si PascalCase
est utilisé pour les noms de classe et de module, les fichiers dans lesquels ils résident doivent toujours être lower_snake_case
.
Le nommage cohérent est important car Rails utilise les fichiers à chargement automatique en fonction des besoins et utilise "flexion" pour transformer différents styles de dénomination, tels que la transformation de application_controller
en ApplicationController
et inversement.
Par exemple, si Rails voit que la classe BlogPost
n'existe pas (elle n'a pas encore été chargée), elle recherchera un fichier nommé blog_post.rb
et tentera de charger ce fichier.
Il est donc également important de nommer les fichiers pour ce qu'ils contiennent, car l'autochargeur s'attend à ce que les noms de fichiers correspondent au contenu. Si, par exemple, blog_post.rb
contient une classe nommée juste Post
, vous verrez un LoadError
: Expected [some path]/blog_post.rb to define BlogPost
.
Si vous ajoutez un répertoire sous app/something/
(par exemple / models / products /), et
- vouloir des modules d'espace de nommage et des classes dans le nouveau répertoire alors vous n'avez rien à faire et il sera chargé lui-même. Par exemple, dans
app/models/products/ you would need to wrap your class in
module Products`. - Je ne veux pas que les modules et les classes d'espace de noms se trouvent dans mon nouveau
config.autoload_paths += %W( #{config.root}/app/models/products )
vous devez ensuite ajouterconfig.autoload_paths += %W( #{config.root}/app/models/products )
à votreapplication.rb
pour le charger automatiquement.
Une autre chose à laquelle vous devez faire attention (en particulier si l'anglais n'est pas votre langue maternelle) est le fait que Rails représente des noms pluriels irréguliers en anglais. Donc, si vous avez un modèle nommé "Foot", le contrôleur correspondant doit être appelé "FeetController" plutôt que "FootsController" si vous voulez que les rails "magiques" routage (et beaucoup d'autres fonctionnalités de ce type) fonctionnent.
Classe de modèles à partir du nom du contrôleur
Vous pouvez obtenir une classe Model à partir d'un nom de contrôleur de cette manière (le contexte est la classe Controller):
class MyModelController < ActionController::Base
# Returns corresponding model class for this controller
# @return [ActiveRecord::Base]
def corresponding_model_class
# ... add some validation
controller_name.classify.constantize
end
end