Middle
Kada se kreira objekat kontrolera i koliko traje njegovo vreme trajanja?
sobes.tech АИ
Одговор од АИ
Објекат контролера се креира у тренутку када добијете HTTP-захтев маршрутизатор Rails, који одређује који контролер и акција морају обрадити захтев.
Време живота објекта контролера је ограничено на један HTTP-захтев. Након обраде захтева и генерисања одговора, Rails уништава објекат контролера.
Ово се дешава у следећем редоследу:
- Пријем захтева: Веб сервер преноси HTTP-захтев Rails апликацији.
- Маршрутирање: Rails-роутер анализира захтев и налази одговарајући контролер и акцију.
- Иницијализација контролера: Rails креира нови примерак класе контролера, дефинисане маршрутизатором.
- Извршавање акције: Rails позива одговарајућу методу-акцију у креираном објекту контролера.
- Обрада захтева: Метода-акција извршава логику, интеракцију са моделима и могуће са другим сервисима.
- Рендеровање приказа: Контролер припрема податке за приказ и позива његово рендеровање.
- Пошиљак одговора: Rails формулише HTTP-одговор, укључујући резултат рендеровања приказа (или JSON, или други формат), и шаље га клијенту.
- Уништавање контролера: Након слања одговора, објекат контролера
и повезане променљиве (нпр.,
@instance_variables) се уништавају од стране Ruby-јевог сакупљача смећа.
# Приближно, како изгледа на нивоу фрејмворка
# (не стварни код фрејмворка, већ концептуални пример)
class Rails::Application
def receive_request(request)
# request - објекат HTTP-захтева
route = Rails.application.routes.recognize(request)
# route садржи информације о контролеру и акцији
controller_class = route.controller_class
action_name = route.action_name
# Креирање примерка контролера
controller_instance = controller_class.new
controller_instance.request = request
# Извршавање акције
response = controller_instance.process(action_name)
# Пошиљак одговора и уништавање објекта
send_response(response)
# Објекат controller_instance постаје кандидат за сакупљање смећа
end
end
Дакле, сваки нови HTTP-захтев доводи до креирања новог,
независног примерка контролера. Ово гарантује да стање једног
захтева не утиче на стање других захтева. Променљиве примерка (@)
у контролеру живе управо толико дуго колико се обрађује један конкретан
захтев.