Ruby on Rails:控制器纵览
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:控制器纵览相关推荐
- 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 ...
- Ruby on Rails路径穿越与任意文件读取漏洞分析(CVE-2019-5418)
Ruby on Rails是一个 Web 应用程序框架,是一个相对较新的 Web 应用程序框架,构建在 Ruby 语言之上.它被宣传为现有企业框架的一个替代,而它的目标,就是让 Web 开发方面的生活 ...
- ruby语言开源Web应用框架 Ruby on Rails 简介
目录 Ruby on Rails是什么 历史 Rails 的 MVC 架构 Web 服务器支持 数据库支持 系统要求 集成开发环境 Ruby on Rails是什么 Ruby on Rails(官方简 ...
- Ruby on rails
转自https://www.cnblogs.com/fantiantian/p/3401913.html Ruby on rails初体验(一) 接触ruby on rails 已经有一段时间了,想记 ...
- Ruby on Rails 實戰聖經阅读(三)
由于是1.8.x:圣经的1.9.3差太多,所以另外按1.8.X来创建hello world 第一個Hello World!! 1. 创建项目rails -d mysql first 2.创建控制器 ...
- netbeans下开发rails快捷键 及 Ruby On Rails开发技巧总结
在controller和view直接跳转 - Ctrl + Shift + A 在controller/model和test/spec之间跳转 - Ctrl + Shift + T 直接跳转到类和方法 ...
- bdd cucumber_如何使用BDD构建坚如磐石的Ruby on Rails应用
bdd cucumber by Marko Anastasov 通过Marko Anastasov 如何使用BDD构建坚如磐石的Ruby on Rails应用 (How to build rock-s ...
- Ruby on Rails 和 J2EE:两者能否共存?
Ruby on Rails 和 J2EE:两者能否共存? 两个 Web 应用程序框架的比较 文档选项 <tr valign="top"><td width=&qu ...
- 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 ...
- 清除或重新创建Ruby on Rails数据库
我有一个充满数据的开发Ruby on Rails数据库. 我想删除所有内容并重建数据库. 我正在考虑使用类似的东西: rake db:recreate 这可能吗? #1楼 我今天对我的rails架构做 ...
最新文章
- Matlab编程与数据类型 -- 奇数阶魔方矩阵的编程
- python3 dict 字典 合并
- PostgreSQL 11 100亿 tpcb 性能测试 on ECS
- 【转】Android 之最新最全的Intent传递数据方法
- 【Python】猜数小游戏(文件操作)
- 沉船会有什么_世界六大沉船,最后一艘有40吨财宝!8吨黄金!你眼红了吗?
- LeetCode-Clone Graph-克隆无向图
- 图像的输入\输出和显示
- BZOJ4653 [NOI2016] 区间 【线段树】
- 108次练习之模拟实现STL中的Vector(一)
- c语言程序设计医院排队功能,C语言-医院挂号排队系统.doc
- html中的flv视频播放器
- python爬虫免登录_爬虫使用cookie免登陆
- 偶遇RandomAccessFile
- 图片转Word文档怎么转?这两种转换方法学起来
- 以下是两段c语言代码 函数arith(),第二章习-ddg.doc
- 编辑PDF文件时如何提取页面
- SAP BC ORACLE 12C Cleanup ILM_EXECUTION$, ILM_RESULTS$
- 计算机什么课学mcmc,MCMC案例学习
- 一个简单的ASP登录页面
热门文章
- ubuntu下面使用stata进行线性回归
- HADOOP集群中节点之间的配置文件可否不一样?
- Clion:undefined reference to `cv::noArray()解决方案
- pycharm中的console退出问题以及console和pycharm各自运行结果不一样的问题
- C/C++编程心得(二)
- 机器学习(一)——线性回归、分类与逻辑回归
- elisa标准曲线怎么做_如何合理绘制ELISA标准曲线要点
- 对于Java回调的最深刻解析
- 复制控制---复制构造函数
- psycopg2模块安装问题