应用程序控制器具有哪些属性和方法?

时间:2017-07-27 02:26:02

标签: ruby-on-rails ruby oop

我试图通过面向对象编程的镜头更深入地理解Rails。

在构建基本应用程序时,模型的属性和方法看起来更加明显和可视,因为开发人员定义了属性和方法,如查找和所有经常使用的方法。

但我不确定控制器具有什么属性和方法,使用什么以及何时使用它。

我已经想过使用.method方法查看Application Controller有哪些方法,但我无法弄清楚在对象槽的控制台中输入什么内容。

Bottomline是我知道控制器在理论上做了什么,但是当涉及到实际的源代码时,不确定代码的哪个部分代表ApplicationController。

对于像博客这样的简单CRUD应用程序,使用了哪种方法和属性?

2 个答案:

答案 0 :(得分:1)

Rails中的

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请求在委派给指定控制器之前首先在应用程序上命中的地方

当存在来自客户端的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,这样您就可以进一步检查运行时服务器上的对象。