Ruby on Rails的控制器纵览 - 编程入门网
Ruby on Rails的控制器纵览时间:2011-11-09在一个基于MVC的Web应用程序中,应用程序逻辑以及数据的存取是由MVC中的C,也就是控制器来完成的。因此,深刻地理解MVC框架所提供控制器对于开发一个高效、可升级、稳定的应用程序是十分必要的。RoR也不例外。 RoR中所提供的控制器叫动作控制器(ActionController)。本文将主要讨论动作控制器所提供的几种服务,以及如何使用动作控制器。 什么是动作控制器 在RoR中,动作包(Action Pack)是这个框架的核心。它包括两部分,动作视图和动作控制器。动作包的一个特点是除了Web程序,不能使用在其它类型的程序中。下面让我们看看在我们通过浏览器键入一个URL后,如http://localhost:3000/demo/say/hello,都发生了什么。下面是在RoR中处理动作的步骤: 1. RoR首先装载了位于app/controllers目录中的say_controller.rb文件。这个文件只被装载一次。 2. 然后 RoR建立了类SayController的实例。 3. 一旦SayController类被实例化,RoR就会在app/helpers中查找say_helper.rb文件。如果这个文件存在,它就会被装载,并且这个文件将会和SayController对象混合。这就意味着在SayController对象中可以直接访问SayHelper中的方法。 4. 最后在app/models中查找say.rb文件,如果存在,装载它。 到现在为止,我们已经对应用程序的初始化过程非常清楚了,接下来让我们继续看看动作控制器所提供的服务。下面是RoR所提供的服务列表: 1. URL映射 2. 会话跟踪 3. 过滤和验证 4. 缓冲 Ruby on Rails的控制器纵览(2)时间:2011-11-09现在又带来一个问题。这些服务为什么由控制器来提供。当然,答案也很简单,这是因为控制器介于数据和应用程序之间,因此,它可以监视数据的存取,并且可以根据需要对URL进行映射。因此,这些服务理所当然由控制器来提供。下面我们将详细讨论控制器提供的这些服务。 1. URL映射 当我们在浏览器中输入http://localhost:3000/admin/show时,会显示相应的内容。但你也许会有疑问,RoR是如何将URL链接映射成相应的类或方法呢?事实上,这些映射的代码都被写在了config目录中的routers.rb中。下面是这个文件的部分代码。 ActionController::Routing::Routes.drawdo|map| map.connect '':controller/service.wsdl'', :action => ''wsdl'' map.connect '':controller/:action/:id'' end 动作控制器通过它的映射组件将来自外部请求的URL和内部的应用程序连接了起来。上述代码的第3行就是完成这个功能的。在这行语句中,map.connect的连接字符串是":controller/:action/:id"。请求的URL只有匹配这个字符串才能被接受。对于一个URL请求来说,它可以被RoR分成三部分: a. 第一部分是模式字符串中的:controller部分。 b. 第二部分是模式字符串中的:action部分。 c. 第三部分是模式字符串中的:id部分。 根据上面所描述的三部分,URL:http://localhost:3000/demo/admin/show/1/将被映射成以下三部分: :controller : ''admin'', :action :''show'', :id :1 根据以上的三部分,RoR将调用admin控制器的show方法,并将参数1传到show方法中。因此,我们可以看出,RoR在其中做了很多本应该由我们做的事件。因此,RoR是一项十分强大技术。 2. 会话跟踪 跨应用跟踪用户是大多数Web应用程序都需要的功能。在RoR中,我们可使用由RoR框架提供cookies或session管理来跟踪用户。但在RoR中的cookies和session管理和其它框架所提供的类似的管理不同的,RoR的cookies和session管理无需显式地调用相应的cookies和session对象就可以做到这一切。下面让我们来看看它的实现代码: class CookiesController < ApplicationController def create_cookie coo |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |