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
方法将对象保存在数据库中。