Sobes.tech
Middle

À quel moment l'objet contrôleur est-il créé et quelle est sa durée de vie?

sobes.tech IA

Réponse de l'IA

L'objet contrôleur est créé au moment où Rails reçoit une requête HTTP, qui détermine quel contrôleur et quelle action doivent traiter la requête.

La durée de vie de l'objet contrôleur est limitée à une seule requête HTTP. Après le traitement de la requête et la génération de la réponse, Rails détruit l'objet contrôleur.

Cela se produit dans l'ordre suivant :

  1. Réception de la requête : Le serveur web transmet la requête HTTP à l'application Rails.
  2. Routage : Rails analyse la requête et trouve le contrôleur et l'action correspondants.
  3. Initialisation du contrôleur : Rails crée une nouvelle instance de la classe contrôleur définie par le routeur.
  4. Exécution de l'action : Rails appelle la méthode d'action correspondante sur l'objet contrôleur créé.
  5. Traitement de la requête : La méthode d'action effectue la logique, en interagissant avec les modèles et éventuellement avec d'autres services.
  6. Rendu de la vue : Le contrôleur prépare les données pour la vue et appelle son rendu.
  7. Envoi de la réponse : Rails forme la réponse HTTP, incluant le résultat du rendu de la vue (ou JSON ou autre format), et l'envoie au client.
  8. Destruction du contrôleur : Après l'envoi de la réponse, l'objet contrôleur et ses variables associées (par exemple, @variables_d_instance) sont supprimés par le ramasse-miettes de Ruby.
# Approximativement, à quoi cela ressemble au niveau du framework
# (pas du code réel du framework, mais un exemple conceptuel)

class Rails::Application
  def receive_request(request)
    # request - objet de requête HTTP
    route = Rails.application.routes.recognize(request)
    # route contient des informations sur le contrôleur et l'action

    controller_class = route.controller_class
    action_name = route.action_name

    # Création d'une instance du contrôleur
    controller_instance = controller_class.new
    controller_instance.request = request

    # Exécution de l'action
    response = controller_instance.process(action_name)

    # Envoi de la réponse et destruction de l'objet
    send_response(response)
    # L'objet controller_instance devient un candidat à la collecte de déchets
  end
end

Ainsi, chaque nouvelle requête HTTP conduit à la création d'une nouvelle instance indépendante du contrôleur. Cela garantit que l'état d'une requête n'affecte pas l'état d'autres requêtes. Les variables d'instance (@) dans le contrôleur vivent exactement aussi longtemps que le traitement d'une requête spécifique.