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:
- Kérés fogadása: A webszerver átadja a HTTP-kérést a Rails alkalmazásnak.
- Útvonalkezelés: A Rails elemzi a kérést, és megtalálja a megfelelő vezérlőt és műveletet.
- Vezérlő inicializálása: Rails létrehoz egy új példányt a router által meghatározott vezérlő osztályból.
- Művelet végrehajtása: Rails meghívja a megfelelő műveletet az elkészített vezérlő objektumon.
- 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.
- Nézet renderelése: A vezérlő előkészíti az adatokat a nézethez, és meghívja annak renderelését.
- 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.
- 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.