Y a-t-il un inconvénient à utiliser des noms singuliers pour les contrôleurs et les assistants? Rien ne semble s'appuyer sur cela. Il semble même que les assistants n'aient pas à faire le même choix entre le singulier et le pluriel que leurs contrôleurs correspondants, du moins selon mon expérimentation limitée. Est-ce vrai?
Certainement pluriel.
Manette:
dog_controller.rb
Itinéraires:
map.resources :dogs # => blows up
map.resources :dog # is ok, but...
dogs_path # => blows up
dog_path # => ok
Manette:
dogs_controller.rb
Itinéraires:
map.resources :dogs
dogs_path # => ok
dog_path # => ok
Rails generate controller --help
a plusieurs exemples:
Example:
`Rails generate controller CreditCards open debit credit close`
CreditCards controller with URLs like /credit_cards/debit.
Controller: app/controllers/credit_cards_controller.rb
Test: test/controllers/credit_cards_controller_test.rb
Views: app/views/credit_cards/debit.html.erb [...]
Helper: app/helpers/credit_cards_helper.rb
L'utilisation de plusieurs noms pour les contrôleurs n'est qu'une convention.
Les noms au pluriel sonnent généralement plus naturellement (en particulier pour les contrôleurs qui sont directement liés à un modèle spécifique: Utilisateur -> Utilisateurs, etc.), mais vous pouvez utiliser ce que vous voulez.
En ce qui concerne les assistants, tous les assistants sont disponibles pour tous les contrôleurs par défaut, donc techniquement, la façon dont vous nommez vos assistants n'a pas d'importance du tout. C'est juste une autre convention de conserver les fonctions d'aide d'un contrôleur dans une aide portant le même nom que le contrôleur.
Un modèle est singulier car il fait référence à un seul objet comme l'utilisateur. Un contrôleur est pluriel car il s'agit des contrôles (méthodes) pour la collecte des utilisateurs. La façon dont on nomme les itinéraires dépend de ce développeur individuel. Je n'ai jamais vu un utilisateur se plaindre qu'une URL pour une demande Web est au singulier ou au pluriel. Le résultat final est de maintenir une convention commune pour les contributeurs actuels et futurs tout en servant des affichages de page de qualité ou les demandes d'API pour les utilisateurs finaux.
Vous avez une explication très complète dans les guides Rails: http://edgeguides.rubyonrails.org/routing.html#resource-routing-the-Rails-default
C'est la convention Rails qu'un contrôleur gère un modèle, si une ou plusieurs instances de ce modèle peuvent exister pendant l'exécution. Cependant, vous pouvez avoir une Rails application où (certains) des contrôleurs (et les vues associées) ne sont pas associés à un modèle particulier, mais gèrent plutôt un ensemble de fonctionnalités plus complexe. Dans ce cas, la pluralisation automatique n'a aucun sens.
L'application Rails sur laquelle je travaille actuellement s'inscrit dans cette catégorie, et c'est simplement une irritation pour moi que Rails s'attend à ce que les identificateurs que je définis comme singulier) à un endroit sont ensuite utilisés dans leurs formes plurielles à d'autres endroits. Par exemple, je pourrais vouloir définir quelque chose comme ça dans config/routes.rb
:
resource :dashboard, :only => [:show]
puis je souhaite qu'un contrôleur DashboardController
affiche des informations récapitulatives sur certains aspects de l'application, rassemblant des informations à partir de plusieurs tables de base de données. Donc ici, Dashboard
ne fait référence à aucun modèle de l'application, et il serait tout simplement bizarre que le nom du contrôleur soit DashboardsController
.
J'ai trouvé une bonne solution à l'irritation de la pluralisation automatique dans cette réponse . En bref, modifiez le fichier config/initializers/inflections.rb
et ajoutez les mots que vous ne voulez pas être automatiquement pluralisés à cette définition:
ActiveSupport::Inflector.inflections do |inflect|
inflect.uncountable %w( dashboard foo bar baz )
end
Je me sens mieux quand j'utilise singulier pour le nom du contrôleur
Si le contrôleur est une ressource, il doit être pluriel ...
Par exemple
Manette
articles_controller.rb
Modèle
article.rb
Mais vous pouvez utiliser des noms de contrôleur singuliers lorsque vous n'avez pas de modèles correspondants comme
welcome_controller.rb
La convention de dénomination des contrôleurs dans Rails favorise la pluralisation du dernier mot du nom du contrôleur, bien que ce ne soit pas strictement requis (par exemple ApplicationController
).
Par exemple, ClientsController
est préférable à ClientController
, SiteAdminsController
est préférable à SiteAdminControlle
r ou SitesAdminsController
, etc.
Le respect de cette convention vous permettra d'utiliser les générateurs de route par défaut (par exemple, les ressources, etc.) sans avoir besoin de qualifier chaque :path
ou :controller
, et gardera l'utilisation des URL et des chemins d'accès cohérente dans toute votre application.
Utiliser des pluriels sonne juste mieux, puis si vous avez un contrôleur qui gère un recours singulier, c'est-à-dire utilisateur, alors vous pouvez toujours nommer l'url/utilisateur.
Avec les assistants, il n'est souvent pas nécessaire d'avoir un assistant pour chaque contrôleur, et souvent il y aura des méthodes d'aide que vous pouvez utiliser ascorss plusieurs contrôleurs et plutôt les répartir tout au long de votre assistant d'application, vous pouvez les mettre dans des assistants personnalisés à la place comme par exemple layout_helper ou tout autre autre fichier bien nommé.