控制器类在什么时候实例化 Rails Web 应用程序中的控制器对象?



Learning Rails,我不清楚控制器被实例化的点,而模型被实例化的点在某种程度上是可识别的,例如,当用户在from中输入数据并单击提交按钮时,这是一种触发器,导致创建对象模型。

做了一些研究,我在脑海中想象,当通过浏览器发送HTTP请求时,到控制器的路由成为从控制器类实例化某个控制器对象的触发器。

这有点正确吗?

当 HTTP 请求进入您的应用程序服务器(puma、webrick 等(时,请求会通过一堆中间件(在 gem 中定义rails(,该中间件堆栈将 HTTP 请求转换为ActionDispatch::Request类的实例,该实例用于根据config/routes.rb中定义的路由定义确定要调度到 rails 应用程序中相应控制器类的正确路由。

然后将生成的request对象调度到相应的控制器和操作方法,该方法实例化控制器类,并在它的实例上调用一个动作方法,参数为params对象(ActionController::Parameters的实例(。

这只是如何实例化控制器的一般概述。在生成request对象之前,请求对象会经过一系列中间件类和模块。

如果您想详细阅读,这是一篇好文章。

当我们在 routes.rb 中定义路由时,控件转到该控制器操作

时控制器启动工作

它与面向对象编程更相关,当你在class上调用new时,对象总是被实例化

2.0.0-p648 :001 > Class.new
=> #<Class:0x007fee8e99d9a8> 
2.0.0-p648 :002 > 

在这里,对象被实例化,同样在轨道中,当你调用任何动作时,比如说

def new
@article = Article.new
end

新对象启动,当您单击save时,您实际上是在调用create操作,并传递当前对象。

def create
@article = Article.create(article_params)
@article.save
end

在这里.create方法填充对象article_params.save方法将对象保存在数据库中。

最新更新