Middle
Kedy sa vytvára objekt kontroléra a aká je jeho doba života?
sobes.tech AI
Odpoveď od AI
Objekt kontroléra sa vytvára v okamihu prijatia HTTP požiadavky routerom Rails, ktorý určuje, ktorý kontrolér a akcia by mali spracovať požiadavku.
Životnosť objektu kontroléra je obmedzená na jeden HTTP požiadavok. Po spracovaní požiadavky a generovaní odpovede Rails zničí objekt kontroléra.
Toto sa deje v nasledovnom poradí:
- Prijatie požiadavky: Web server odovzdá HTTP požiadavku aplikácii Rails.
- Routovanie: Rails routér analyzuje požiadavku a nájde zodpovedajúci kontrolér a akciu.
- Inicializácia kontroléra: Rails vytvorí nový inštančný objekt triedy kontroléra, definovanej routérom.
- Vykonanie akcie: Rails zavolá zodpovedajúcu metódu-akciu v vytvorenom objekte kontroléra.
- Spracovanie požiadavky: Metóda-akcia vykonáva logiku, interaguje s modelmi a prípadne s inými službami.
- Renderovanie zobrazenia: Kontrolér pripraví údaje na zobrazenie a zavolá jeho renderovanie.
- Odoslanie odpovede: Rails vytvorí HTTP-odpoveď, ktorá obsahuje výsledok renderovania zobrazenia (alebo JSON, alebo iný formát), a odošle ju klientovi.
- Zničenie kontroléra: Po odoslaní odpovede sa objekt kontroléra
a s ním spojené premenné (napríklad
@instance_variables) zničia zberačom odpadkov Ruby.
# Približne, ako to vyzerá na úrovni frameworku
# (nie je to skutočný kód frameworku, ale konceptuálny príklad)
class Rails::Application
def receive_request(request)
# request - objekt HTTP požiadavky
route = Rails.application.routes.recognize(request)
# route obsahuje informácie o kontroléri a akcii
controller_class = route.controller_class
action_name = route.action_name
# Vytvorenie inštancie kontroléra
controller_instance = controller_class.new
controller_instance.request = request
# Vykonanie akcie
response = controller_instance.process(action_name)
# Odoslanie odpovede a zničenie objektu
send_response(response)
# Objekt controller_instance sa stáva kandidátom na zber odpadu
end
end
Takže, každý nový HTTP požiadavok vedie k vytvoreniu nového,
nezávislého inštancie kontroléra. To zabezpečuje, že stav jedného
požiadavku neovplyvňuje stav iných požiadaviek. Premenné inštancie (@)
v kontroléri žijú presne toľko, koľko sa spracováva jeden konkrétny
požiadavok.