控制器 class 在什么时候实例化 Rails 网络应用程序中的控制器对象?
At what point does a controller class instantiate a controller object in a Rails web app?
学习 Rails,我不清楚控制器实例化的时间点,而模型实例化的时间点在某种程度上是可以识别的,例如,当用户在 from 和单击提交按钮是一种导致创建对象模型的触发器。
做了一些研究,我在脑海中想象,当通过浏览器发送 HTTP 请求时,到控制器的路由成为从控制器 class 实例化某个控制器对象的触发器。
这样说对吗?
当我们在 routes.rb 中定义路由时,控制器会在控制器开始工作时转到控制器操作
它与面向对象编程更相关,当您在 class
上调用 new
时,对象总是被实例化
2.0.0-p648 :001 > Class.new
=> #<Class:0x007fee8e99d9a8>
2.0.0-p648 :002 >
这里对象被实例化,并且在 rails 中类似地当你调用任何动作时让我们说
def new
@article = Article.new
end
新对象启动,当你点击save
时,你实际上是在调用create
动作,并传递当前对象。
def create
@article = Article.create(article_params)
@article.save
end
此处 .create
方法填充对象 article_params
和 .save
方法将对象保存在数据库中。
当 HTTP 请求进入您的应用服务器(puma、webrick 等)时,请求通过一堆中间件(在 rails
gem 中定义),它将 HTTP 请求转换为ActionDispatch::Request
class 的一个实例,用于根据 config/routes.rb
中定义的路由定义确定正确的路由以分派到 rails 应用中的适当控制器 class ].
然后将生成的 request
对象分派到相应的控制器和操作方法,该方法实例化控制器 class 并在其实例上使用 params
对象的参数调用操作方法(ActionController::Parameters
的实例)。
这只是控制器如何实例化的一般概述。请求对象在生成 request
对象之前经过一系列中间件 classes 和模块。
如果你想read it in detail,这里有一篇好文章。
学习 Rails,我不清楚控制器实例化的时间点,而模型实例化的时间点在某种程度上是可以识别的,例如,当用户在 from 和单击提交按钮是一种导致创建对象模型的触发器。
做了一些研究,我在脑海中想象,当通过浏览器发送 HTTP 请求时,到控制器的路由成为从控制器 class 实例化某个控制器对象的触发器。
这样说对吗?
当我们在 routes.rb 中定义路由时,控制器会在控制器开始工作时转到控制器操作
它与面向对象编程更相关,当您在 class
new
时,对象总是被实例化
2.0.0-p648 :001 > Class.new
=> #<Class:0x007fee8e99d9a8>
2.0.0-p648 :002 >
这里对象被实例化,并且在 rails 中类似地当你调用任何动作时让我们说
def new
@article = Article.new
end
新对象启动,当你点击save
时,你实际上是在调用create
动作,并传递当前对象。
def create
@article = Article.create(article_params)
@article.save
end
此处 .create
方法填充对象 article_params
和 .save
方法将对象保存在数据库中。
当 HTTP 请求进入您的应用服务器(puma、webrick 等)时,请求通过一堆中间件(在 rails
gem 中定义),它将 HTTP 请求转换为ActionDispatch::Request
class 的一个实例,用于根据 config/routes.rb
中定义的路由定义确定正确的路由以分派到 rails 应用中的适当控制器 class ].
然后将生成的 request
对象分派到相应的控制器和操作方法,该方法实例化控制器 class 并在其实例上使用 params
对象的参数调用操作方法(ActionController::Parameters
的实例)。
这只是控制器如何实例化的一般概述。请求对象在生成 request
对象之前经过一系列中间件 classes 和模块。
如果你想read it in detail,这里有一篇好文章。