web-dev-qa-db-fra.com

Noms de contrôleur et d'assistance au singulier ou au pluriel dans Rails

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?

110
allyourcode

Certainement pluriel.

Avec un routage reposant et un contrôleur singulier

Manette:

dog_controller.rb  

Itinéraires:

map.resources :dogs  # => blows up  
map.resources :dog  # is ok, but...  
dogs_path # => blows up  
dog_path  # => ok  

Utilisation d'un contrôleur pluriel

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
155
jpgeek

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.

26
Can Berk Güder

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.

19
Ryan

Vous avez une explication très complète dans les guides Rails: http://edgeguides.rubyonrails.org/routing.html#resource-routing-the-Rails-default

12
Nerian

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
9
Teemu Leisti

Je me sens mieux quand j'utilise singulier pour le nom du contrôleur

2

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
2
user5650203

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 à SiteAdminController 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.

Ref: Controller Naming Convention-Rails Doc

2

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é.

1
nitecoder