Middle
Кога се създава обектът на контролера и какъв е неговият живот?
sobes.tech AI
Отговор от AI
Обектът на контролера се създава в момента, когато Rails получи HTTP заявка, която определя кой контролер и действие трябва да обработят заявката.
Животът на обекта на контролера е ограничен до една HTTP заявка. След обработката на заявката и генерирането на отговор, Rails унищожава обекта на контролера.
Това се случва в следния ред:
- Получаване на заявката: Уеб сървърът предава HTTP заявката към Rails приложението.
- Рутинг: Rails анализира заявката и намира съответния контролер и действие.
- Инициализация на контролера: Rails създава нов екземпляр на класа контролер, определен от маршрутизатора.
- Изпълнение на действието: Rails извиква съответния метод на действието върху създадения обект на контролера.
- Обработка на заявката: Методът на действието изпълнява логиката, взаимодействайки с модели и евентуално с други услуги.
- Рендериране на изгледа: Контролерът подготвя данните за изгледа и го извиква.
- Изпращане на отговора: Rails формира HTTP отговора, който включва резултата от рендерирането (или JSON или друг формат), и го изпраща на клиента.
- Унищожаване на контролера: След изпращане на отговора, обектът на контролера и свързаните с него променливи (например
@променливи_на_инстанцията) се изтриват от събирача на боклука на 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 заявка води до създаването на нов, независим екземпляр на контролера. Това гарантира, че състоянието на една заявка не влияе на състоянието на други заявки. Променливите на инстанцията (@) в контролера живеят точно толкова, колкото е необходимо за обработката на една конкретна заявка.