在一个基于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. 缓冲

  现在又带来一个问题。这些服务为什么由控制器来提供。当然,答案也很简单,这是因为控制器介于数据和应用程序之间,因此,它可以监视数据的存取,并且可以根据需要对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是一项十分强大技术。

转载于:https://www.cnblogs.com/xiaoman_890/archive/2009/05/04/1448949.html

Ruby on Rails:控制器纵览相关推荐

  1. ruby on rails_我成为了Ruby on Rails和React的贡献者,你也可以

    ruby on rails I am really grateful to have contributed to a few open source projects, including two ...

  2. Ruby on Rails路径穿越与任意文件读取漏洞分析(CVE-2019-5418)

    Ruby on Rails是一个 Web 应用程序框架,是一个相对较新的 Web 应用程序框架,构建在 Ruby 语言之上.它被宣传为现有企业框架的一个替代,而它的目标,就是让 Web 开发方面的生活 ...

  3. ruby语言开源Web应用框架 Ruby on Rails 简介

    目录 Ruby on Rails是什么 历史 Rails 的 MVC 架构 Web 服务器支持 数据库支持 系统要求 集成开发环境 Ruby on Rails是什么 Ruby on Rails(官方简 ...

  4. Ruby on rails

    转自https://www.cnblogs.com/fantiantian/p/3401913.html Ruby on rails初体验(一) 接触ruby on rails 已经有一段时间了,想记 ...

  5. Ruby on Rails 實戰聖經阅读(三)

    由于是1.8.x:圣经的1.9.3差太多,所以另外按1.8.X来创建hello world 第一個Hello World!! 1. 创建项目rails -d mysql first 2.创建控制器  ...

  6. netbeans下开发rails快捷键 及 Ruby On Rails开发技巧总结

    在controller和view直接跳转 - Ctrl + Shift + A 在controller/model和test/spec之间跳转 - Ctrl + Shift + T 直接跳转到类和方法 ...

  7. bdd cucumber_如何使用BDD构建坚如磐石的Ruby on Rails应用

    bdd cucumber by Marko Anastasov 通过Marko Anastasov 如何使用BDD构建坚如磐石的Ruby on Rails应用 (How to build rock-s ...

  8. Ruby on Rails 和 J2EE:两者能否共存?

    Ruby on Rails 和 J2EE:两者能否共存? 两个 Web 应用程序框架的比较 文档选项 <tr valign="top"><td width=&qu ...

  9. ruby on rails_如何在Ruby on Rails应用中用Vue.js替换jQuery

    ruby on rails by Igor Petrov 通过伊戈尔·彼得罗夫(Igor Petrov) 如何在Ruby on Rails应用中用Vue.js替换jQuery (How to repl ...

  10. 清除或重新创建Ruby on Rails数据库

    我有一个充满数据的开发Ruby on Rails数据库. 我想删除所有内容并重建数据库. 我正在考虑使用类似的东西: rake db:recreate 这可能吗? #1楼 我今天对我的rails架构做 ...

最新文章

  1. Matlab编程与数据类型 -- 奇数阶魔方矩阵的编程
  2. python3 dict 字典 合并
  3. PostgreSQL 11 100亿 tpcb 性能测试 on ECS
  4. 【转】Android 之最新最全的Intent传递数据方法
  5. 【Python】猜数小游戏(文件操作)
  6. 沉船会有什么_世界六大沉船,最后一艘有40吨财宝!8吨黄金!你眼红了吗?
  7. LeetCode-Clone Graph-克隆无向图
  8. 图像的输入\输出和显示
  9. BZOJ4653 [NOI2016] 区间 【线段树】
  10. 108次练习之模拟实现STL中的Vector(一)
  11. c语言程序设计医院排队功能,C语言-医院挂号排队系统.doc
  12. html中的flv视频播放器
  13. python爬虫免登录_爬虫使用cookie免登陆
  14. 偶遇RandomAccessFile
  15. 图片转Word文档怎么转?这两种转换方法学起来
  16. 以下是两段c语言代码 函数arith(),第二章习-ddg.doc
  17. 编辑PDF文件时如何提取页面
  18. SAP BC ORACLE 12C Cleanup ILM_EXECUTION$, ILM_RESULTS$
  19. 计算机什么课学mcmc,MCMC案例学习
  20. 一个简单的ASP登录页面

热门文章

  1. ubuntu下面使用stata进行线性回归
  2. HADOOP集群中节点之间的配置文件可否不一样?
  3. Clion:undefined reference to `cv::noArray()解决方案
  4. pycharm中的console退出问题以及console和pycharm各自运行结果不一样的问题
  5. C/C++编程心得(二)
  6. 机器学习(一)——线性回归、分类与逻辑回归
  7. elisa标准曲线怎么做_如何合理绘制ELISA标准曲线要点
  8. 对于Java回调的最深刻解析
  9. 复制控制---复制构造函数
  10. psycopg2模块安装问题