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 dans app/views/layouts/ (ou application si aucune correspondance n'est trouvée)
  • une vue appelée index.html.erb dans app/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 comme render 'index_new'
  • nous pouvons définir différentes layouts pour chaque action en écrivant render '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 ajouter config.autoload_paths += %W( #{config.root}/app/models/products ) à votre application.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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow