Sobes.tech
Middle

Qachon nazoratchi obyekti yaratiladi va uning hayoti qancha davom etadi?

sobes.tech AI

AIdan javob

Rails, HTTP-сўров қабул қилинган пайтда, қайси контроллер ва ҳаракатлар сўровни ишлашини белгилайдиган пайтда, контроллер объекти яратилади.

Контроллер объектининг ҳаёти бир 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-сўров янги, мустақил контроллер нусхасини яратади. Бу бир сўров ҳолати бошқаларининг ҳолатига таъсир қилмаслигини кафолатлайди. Контроллердаги @ ўзгарувчилари бир сўровни ишлаш вақтида тўғри яшайди.