Sobes.tech
Middle

Kada se kreira objekat kontrolera i koliko traje njegovo vreme trajanja?

sobes.tech АИ

Одговор од АИ

Објекат контролера се креира у тренутку када добијете HTTP-захтев маршрутизатор Rails, који одређује који контролер и акција морају обрадити захтев.

Време живота објекта контролера је ограничено на један HTTP-захтев. Након обраде захтева и генерисања одговора, Rails уништава објекат контролера.

Ово се дешава у следећем редоследу:

  1. Пријем захтева: Веб сервер преноси HTTP-захтев Rails апликацији.
  2. Маршрутирање: Rails-роутер анализира захтев и налази одговарајући контролер и акцију.
  3. Иницијализација контролера: Rails креира нови примерак класе контролера, дефинисане маршрутизатором.
  4. Извршавање акције: Rails позива одговарајућу методу-акцију у креираном објекту контролера.
  5. Обрада захтева: Метода-акција извршава логику, интеракцију са моделима и могуће са другим сервисима.
  6. Рендеровање приказа: Контролер припрема податке за приказ и позива његово рендеровање.
  7. Пошиљак одговора: Rails формулише HTTP-одговор, укључујући резултат рендеровања приказа (или JSON, или други формат), и шаље га клијенту.
  8. Уништавање контролера: Након слања одговора, објекат контролера и повезане променљиве (нпр., @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-захтев доводи до креирања новог, независног примерка контролера. Ово гарантује да стање једног захтева не утиче на стање других захтева. Променљиве примерка (@) у контролеру живе управо толико дуго колико се обрађује један конкретан захтев.