Middle
Qachon nazoratchi obyekti yaratiladi va uning hayoti qancha davom etadi?
sobes.tech AI
AIdan javob
Rails, HTTP-сўров қабул қилинган пайтда, қайси контроллер ва ҳаракатлар сўровни ишлашини белгилайдиган пайтда, контроллер объекти яратилади.
Контроллер объектининг ҳаёти бир 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-сўров янги, мустақил контроллер нусхасини яратади. Бу бир сўров ҳолати бошқаларининг ҳолатига таъсир қилмаслигини кафолатлайди. Контроллердаги @ ўзгарувчилари бир сўровни ишлаш вақтида тўғри яшайди.