113 votes

Noms de contrôleurs et d'aides au singulier ou au pluriel dans Rails

Y a-t-il un inconvénient à utiliser des noms singuliers pour les contrôleurs et les aides ? Rien ne semble dépendre de cela. Il semble même que les aides n'aient pas à faire le même choix entre le singulier et le pluriel que leurs contrôleurs correspondants, du moins d'après mon expérience limitée. Est-ce bien le cas ?

3 votes

J'ai eu le même dilemme en essayant de choisir des noms de contrôleurs au singulier ou au pluriel !

16 votes

Merci :) La culture Rails a une façon de vous faire sentir stupide si vous posez ce genre de questions.

160voto

jpgeek Points 1673

Définitivement au pluriel .

Avec un routage reposant et un contrôleur unique

Contrôleur :

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

Contrôleur :

dogs_controller.rb

Itinéraires :

map.resources :dogs  
dogs_path # => ok  
dog_path # => ok  

rails generate controller --help a des exemples pluriels :

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

23 votes

D'accord. Il est déroutant que le message d'aide du générateur Rails 3.1 pour les contrôleurs utilise "CreditCard" (au singulier) comme exemple.

4 votes

L'aide de Rails utilise désormais le pluriel : rails generate controller CreditCards open debit credit close

3 votes

A toujours une carte de crédit singulière ici : guides.rubyonrails.org/command_line.html#rails-generate

28voto

Can Berk Güder Points 39887

L'utilisation de noms pluriels pour les contrôleurs est juste une convention.

Les noms pluriels semblent généralement plus naturels (surtout pour les contrôleurs qui sont liés directement à un modèle spécifique : Utilisateur -> Utilisateurs, etc.), mais vous pouvez utiliser ce que vous voulez.

En ce qui concerne les aides, toutes les aides sont disponibles pour tous les contrôleurs par défaut, donc techniquement, la façon dont vous nommez vos aides n'a aucune importance. C'est juste une autre convention pour garder les fonctions d'aide d'un contrôleur dans une aide avec le même nom que le contrôleur.

10 votes

Ne serait-il pas plus naturel que le contrôleur correspondant à User soit le UserController ? En outre, si vous vous fiez aux routes par défaut, vous obtenez des url qui ressemblent à /users/edit, ce qui donne l'impression que vous modifiez tous les utilisateurs. Pour moi, ce n'est pas du tout très naturel.

5 votes

@allyourcode : bien, je suppose que tout est subjectif. Pour moi, avoir /users listant tous les utilisateurs est plus naturel que /user.

1 votes

Oh, et c'est la méthode RESTful.

20voto

rxgx Points 2468

Un modèle est singulier car il fait référence à un seul objet comme l'utilisateur. Un contrôleur est au pluriel car il s'agit des contrôles (méthodes) pour la collection d'utilisateurs. La façon dont on nomme les routes dépend du développeur individuel. Je n'ai jamais eu d'utilisateur qui se soit plaint qu'une URL pour une requête web soit 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 des requêtes API pour les utilisateurs finaux.

12voto

Nerian Points 6733

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

4 votes

En fait, c'est la bonne réponse car si vous lisez le document, il explique que le pluriel est la bonne réponse pour une collection de ressources. Pour une ressource unique, le singulier est la bonne réponse. Exemples dans la documentation. Et en fait, la réponse à cette question se trouve dans cet autre article : stackoverflow.com/questions/2614858/

0 votes

Les réponses appuyées par des références officielles comme dans ce post aident beaucoup les débutants ! Merci à vous

9voto

Teemu Leisti Points 2606

La convention Rails veut qu'un contrôleur gère un modèle, qu'une ou plusieurs instances de ce modèle puissent exister pendant l'exécution. Cependant, vous pouvez avoir une application Rails 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 plus complexe de fonctionnalités. Dans ce cas, la pluralisation automatique n'a pas de sens.

L'application Rails sur laquelle je travaille actuellement entre dans cette catégorie, et le fait que Rails s'attende à ce que les identifiants que je définis au singulier à un endroit soient ensuite utilisés au pluriel à d'autres endroits m'irrite tout simplement. Par exemple, je pourrais vouloir définir quelque chose comme ceci dans config/routes.rb :

  resource :dashboard, :only => [:show]

et ensuite je veux un contrôleur DashboardController pour afficher des informations synthétiques sur certains aspects de l'application, en rassemblant des informations provenant de plusieurs tables de la base de données. Ainsi, 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 en cette réponse . En bref, modifiez le fichier config/initializers/inflections.rb et ajoutez à cette définition les mots que vous ne voulez pas voir se mettre automatiquement au pluriel :

ActiveSupport::Inflector.inflections do |inflect|
  inflect.uncountable %w( dashboard foo bar baz )
end

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