Sobes.tech
Middle

Mikor jön létre a vezérlő objektum, és mennyi az élettartama?

sobes.tech MI

Válasz az MI-től

A vezérlő objektum akkor jön létre, amikor a Rails megkap egy HTTP-kérést, amely meghatározza, hogy melyik vezérlő és művelet fogja kezelni a kérést.

A vezérlő objektum élettartama egyetlen HTTP-kérésre korlátozódik. A kérés feldolgozása és a válasz generálása után a Rails megsemmisíti a vezérlő objektumot.

Ez a következő sorrendben történik:

  1. Kérés fogadása: A webszerver átadja a HTTP-kérést a Rails alkalmazásnak.
  2. Útvonalkezelés: A Rails elemzi a kérést, és megtalálja a megfelelő vezérlőt és műveletet.
  3. Vezérlő inicializálása: Rails létrehoz egy új példányt a router által meghatározott vezérlő osztályból.
  4. Művelet végrehajtása: Rails meghívja a megfelelő műveletet az elkészített vezérlő objektumon.
  5. Kérés feldolgozása: A művelet végrehajtja a logikát, interakcióba lépve modellekkel és esetleg más szolgáltatásokkal.
  6. Nézet renderelése: A vezérlő előkészíti az adatokat a nézethez, és meghívja annak renderelését.
  7. Válasz küldése: Rails elkészíti a HTTP-választ, amely tartalmazza a nézet renderelésének eredményét (vagy JSON-t vagy más formátumot), és elküldi azt a kliensnek.
  8. Vezérlő megsemmisítése: A válasz küldése után a vezérlő objektum és a hozzá kapcsolódó változók (például @példányváltozók) a Ruby szemétgyűjtője által törlődnek.
# Körülbelül így néz ki a keretrendszer szintjén
# (nem valódi keretrendszer kód, hanem egy fogalmi példa)

class Rails::Application
  def receive_request(request)
    # request - HTTP-kérelem objektum
    route = Rails.application.routes.recognize(request)
    # route információkat tartalmaz a vezérlőről és az akcióról

    controller_class = route.controller_class
    action_name = route.action_name

    # Vezérlő példányának létrehozása
    controller_instance = controller_class.new
    controller_instance.request = request

    # Akció végrehajtása
    response = controller_instance.process(action_name)

    # Válasz küldése és az objektum megsemmisítése
    send_response(response)
    # A controller_instance objektum a szemétgyűjtő jelöltje lesz
  end
end

Így minden új HTTP-kérés egy új, független vezérlő példány létrehozásához vezet. Ez garantálja, hogy egy kérés állapota nem befolyásolja más kérés állapotát. A vezérlőben lévő példányváltozók (@) pontosan addig élnek, ameddig egy adott kérés feldolgozása tart.