我试图通过面向对象编程的镜头更深入地理解Rails。
在构建基本应用程序时,模型的属性和方法看起来更加明显和可视,因为开发人员定义了属性和方法,如查找和所有经常使用的方法。
但我不确定控制器具有什么属性和方法,使用什么以及何时使用它。
我已经想过使用.method方法查看Application Controller有哪些方法,但我无法弄清楚在对象槽的控制台中输入什么内容。
Bottomline是我知道控制器在理论上做了什么,但是当涉及到实际的源代码时,不确定代码的哪个部分代表ApplicationController。
对于像博客这样的简单CRUD应用程序,使用了哪种方法和属性?
答案 0 :(得分:1)
ApplicationController
对于您的应用程序是唯一的,但它继承自另一个名为ActionController:: Base
的类。我猜你想知道这个特定类暴露的方法。
总结http://api.rubyonrails.org/classes/ActionController/Base.html:
ActionController :: Base类负责处理所有Web请求,并完成向Rails路由传递请求和从Rails路由传递请求的工作。它提供了类似的方法:
request
(Web请求的整个对象,用于解释要调用的控制器操作)params
(使发送到服务器的参数可用于您的操作),session
(维护您的会话变量)等。因为,Rails负责创建实例并调用适当的方法(或控制器操作),所以你永远不必像使用Model类那样在代码中与Controller类进行交互。
更多信息,您可以随时在Rails的GitHub存储库中打开文件,并查看Rails的工作方式。很有趣!
答案 1 :(得分:1)
在标准rails应用程序中,所有应用程序的控制器都继承自ApplicationController
,它继承自ActionController::Base
,其中包含用于处理从客户端进入应用程序代码库的HTTP请求的类和方法定义(Web - 浏览器,机器人,移动设备等),提取请求参数,处理数据并根据请求以适当的格式(XML,HTML,JSON等)将响应返回给客户端。
因此,从OOP的角度来看,ApplicationController
位于所有应用程序控制器层次结构的顶部。因此,在应用程序的每个部分中都需要大多数常见的过滤器/挂钩,例如:处理身份验证,授权等,因为这是HTTP请求在委派给指定控制器之前首先在应用程序上命中的地方
ApplicationController
对象被实例化。例如,如果您在test
上有一个带有routes.rb条目application_controller.rb
的操作get '/test' => 'application#test'
:
class ApplicationController < ActionController::Base
def test
puts "Instance: #{self}"
puts "Instance Methods: #{self.methods}"
end
end
您可以启动本地服务器并访问http://localhost:3000/test
并检查服务器日志以检查ApplicationController
对象及其方法。
对于详细检查,我建议您将gem 'pry'
添加到Gemfile
并捆绑,然后在binding.pry
操作上使用ApplicationController#test
,这样您就可以进一步检查运行时服务器上的对象。