2017-07-27 40 views
0

我想通过面向对象编程的镜头深入了解Rails。应用程序控制器有哪些属性和方法?

当构建一个基本的应用程序时,模型的属性和方法看起来更加明显和可视化,因为开发人员定义了像find和all这样的常用属性和方法。

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

我想过使用.method方法来查看应用程序控制器有什么方法,但我无法弄清楚在控制台中输入什么对象槽。底线是我知道一个控制器在理论上做了什么,但是当谈到实际的源代码时,不知道代码的哪一部分代表一个ApplicationController。

什么样的方法和属性用于说一个简单的CRUD应用程序,如博客?

+0

那么,简短的回答是......相当多!这是一个很难回答的问题。我会建议[从这里开始](http://www.rubypigeon.com/posts/examining-internals-of-rails-request-response-cycle/)了解所有部分如何配合在一起的概述。 –

+0

@AdamLassek感谢您的链接!我想知道什么属性和方法正在用于像博客这样的简单CRUD应用程序。 – Robert

回答

1

在标准轨道应用中,所有的应用程序的控制器从ApplicationControllerActionController::Base,其含有类和方法定义用于处理从客户端(Web浏览器,机器人,移动设备进入应用程序的基本代码的HTTP请求继承继承等),提取请求参数,处理数据并按照请求以适当格式(XML,HTML,JSON等)将响应返回给客户端。

因此,从OOP的角度来看,ApplicationController服务于所有应用程序控制器层次结构的顶部。因此,应用程序的每个部分都需要使用大多数通用过滤器/挂钩,例如:处理验证,授权等,因为这是HTTP请求在委派给指定控制器之前在您的应用程序中遇到的第一个地方。

ApplicationController当存在来自客户端的HTTP请求时,实例化对象。例如,如果您有application_controller.rb动作test与routes.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和捆绑,然后在ApplicationController#test行动,这可以让你进一步检查您的运行时服务器上的对象使用binding.pry

1

ApplicationController在Rails中是您的应用程序所独有的,但它继承自另一个类ActionController:: Base。我猜你想知道这个特定类的公开方法。

总结http://api.rubyonrails.org/classes/ActionController/Base.html

的的ActionController :: Base类负责所有的Web请求,并执行传递请求,并从轨道路线的工作。这使得像可用的方法:

  • request
  • params(使发送到可用的服务器到你的动作参数)(提出的Web请求被用来解释调用哪一个控制器动作的全对象) ,session(维护您的会话变量)等

因为,Rails的需要创建实例,并调用您的适当的方法(或控制器行动)的责任,你从来没有真正要与控制器类代码交互您可以使用Mode的方式升班。

欲了解更多信息,您可以随时在Rails的GitHub仓库中打开文件,并了解Rails的工作方式。好有趣!

相关问题