【转】深刻理解render 和 redirect_to
由于最近老是在表单提交后出现没有反应的现象,发现是在action中的使用render 和 redirect_to的原因,于是就想搞清楚他两真正的区别在哪里,上一遍的blog也谈到了这二者的区别,但是有点浅,
http://www.blogjava.net/fl1429/archive/2009/03/10/258886.html
下面从我们的程序实验开始:
1,建立controller
test_controller.rb
class TestController < ApplicationController def test1
puts "test1A"
render :action => "test1"
puts "test1B"
end def test2
puts "test2A"
redirect_to :action => "test1"
puts "test2B"
end def test3
puts "test3A"
redirect_to :action => "test3"
puts "test3B"
end end
2,建立view
在对应的views->test目录下有test1.rhtml,test2.rhtml,test3.rhtml,内容随便写,例如内容都为 hello word
3,启动webrick
到相应的目录下Ruby script/server
4,浏览器中浏览页面
(1)页面test1.rhtml: http://localhost:3000/test/test1
浏览器中直接输入地址结果是:
可能是:
1test1A
2test1B
3 127.0.0.1 - - [12/Mar/2009:18:10:11 中国标准时间] "GET /test/test1 HTTP/1.1" 304 0 - -> /test/test1
也可能是:
1127.0.0.1 - - [12/Mar/2009:18:29:50 中国标准时间] "GET /test/test1 HTTP/1.1" 304 0 - -> /test/test1
2test1A
3test1B
(2)页面: test2.rhtml http://localhost:3000/test/test2
结果:
1test2A
2test2B
3127.0.0.1 - - [12/Mar/2009:18:11:10 中国标准时间] "GET /test/test2 HTTP/1.1" 302 98 - -> /test/test2 127.0.0.1 - - [12/Mar/2009:18:11:10 中国标准时间] "GET /test/test1 HTTP/1.1" 304 0 - -> /test/test1
4test1A
5test1B
还可以发现最后,浏览器的地址的变为: http://localhost:3000/test/test1
(3)页面test3.rhtml http://localhost:3000/test/test3
1test3A
2test3B
3127.0.0.1 - - [12/Mar/2009:18:12:29 中国标准时间] "GET /test/test3 HTTP/1.1" 302 98 - -> /test/test3
4test3A
5test3B
6127.0.0.1 - - [12/Mar/2009:18:12:29 中国标准时间] "GET /test/test3 HTTP/1.1" 302 98 - -> /test/test3
执行效果是死循环.
由上述实验得到结论:
1,无论是render 还是 redirect_to 都是方法体内的内容全部执行完再跳转,就算跳转了,方法体内的还是会全部执行的
2,render 是跳转到对应的view下rhtml
3,redirect_to 是跳转到对应的 action 里,所以页面三执行的效果是死循环!
【转】深刻理解render 和 redirect_to的更多相关文章
- 深刻理解render 和 redirect_to
深刻理解render 和 redirect_to http://www.blogjava.net/fl1429/archive/2009/03/12/259403.html 由于最近老是在表单提交后出 ...
- Atitit 图像处理 深刻理解梯度原理计算.v1 qc8
Atitit 图像处理 深刻理解梯度原理计算.v1 qc8 1.1. 图像处理 梯度计算 基本梯度 内部梯度 外部梯度 方向梯度1 2. 图像梯度就是图像边缘吗?2 1.1. 图像处理 梯度计算 ...
- 深刻理解Java中final的作用(一):从final的作用剖析String被设计成不可变类的深层原因
声明:本博客为原创博客,未经同意,不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(原文链接为http://blog.csdn.net/bettarwang/article/det ...
- for循环,你深刻理解了吗?
前几天,有一个面试机会,去看了看,遇到一个认为不错的面试题! 过了几天看到csdn上说华为的一道面试题,看了下和我遇到的很相似! 我分享出来希望大家有帮助! 你真的深刻理解for循环了吗? ...
- 深刻理解iosBlock
深刻理解iosBlock ///一个控制器里的方法 - (void)setRefreshHeader { ACWeakSelf(self); self.tableView.mj_header = [M ...
- javascript 面向对象程序设计--深刻理解对象
javascript中,每个对象都是基于一个引用类型创建的,我们可以把ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数. 深刻理解对象 创建自定义对象的最简单方式就 ...
- [转]深刻理解Python中的元类(metaclass)以及元类实现单例模式
使用元类 深刻理解Python中的元类(metaclass)以及元类实现单例模式 在看一些框架源代码的过程中碰到很多元类的实例,看起来很吃力很晦涩:在看python cookbook中关于元类创建单例 ...
- Nodejs第一天-{Nodejs基础 深刻理解浏览器 环境变量 基础语法}
Nodejs第一天 1.什么是Nodejs Nodejs是一个可以运行(解析)ECMAScript的环境; ECMAScript是规定了一些列的语法 ,这些语法想要解析的执行就需要放在某个环境 ...
- C++ 类的多态一(virtual关键字--构造函数深刻理解)
//virtual关键字--构造函数深刻理解 #include<iostream> using namespace std; /* C语言编译器,c++编译器全部是静态链编,就是一段一段代 ...
随机推荐
- redis持久化AOF详细操作步骤
1.切换到redis目录下面,创建文件 s3-redis.conf 2.编辑文件s3-redis.conf 3.终止当前redis服务端 4.登录redis客户端失败,说明服务端已停止 5.重启red ...
- Android系统移植与调试之------->如何修改Android默认字体大小和设置里面字体大小比例
因为我修改 ro.sf.lcd_density的值,将它从160修改 为120,所以导致整个系统的字体都变得很小.因此需要将整个字体变大,并且在设置-->显示-->字体大小的4个选项的值都 ...
- 好用的 curl 抓取 页面的封装函数
由于经常使用php curl 抓取页面的内容,在此mark 平时自己封装的 curl函数,(其实 现在也开始用 Python 来爬了~ ^-^) /** * 封装curl方法 * @author Fr ...
- [转载]Java web应用中的常见字符编码问题的解决方法
以下是 Java web应用的常见编码问题 1. html页面的编码 在web应用中,通常浏览器会根据http header: Content-type的值来决定用什么encoding, 比如遇到Co ...
- jQuery 中的 Deferred 和 Promises(转)
转自:http://www.css88.com/archives/4750/comment-page-1 看前首先了解:Promises/A规范,具体可以看这里,http://www.css88.co ...
- surf算法解析
surf构造的金字塔图像与sift有很大的不同,sift采用的是DOG图像,surf采用的是hessian矩阵行列式近似值图像,hessian矩阵是surf算法的核心,构建hessian矩阵的目的是为 ...
- htop的使用
htop是top的增强版本.官网地址: http://hisham.hm/htop/ 这网站比较...... 实验环境: [root@miyan ~]# cat /etc/redhat-release ...
- ARDUINO MEGA2560 经过ESP8266 WIFI模块上传温湿度数据到 OneNet 服务器
简述 原来写了一个C++的wifi库但是发现用c++ arduino这小身板有点扛不住,代码比较大,使用String类型数据处理速度慢,而且很容易无缘无故跑飞.而且封装成库后使用还需要修改arduin ...
- Vue:实践学习笔记(1)——快速使用
Vue:实践学习笔记(1)——快速使用 Vue基础知识 0.引入Vue 官方地址:Vue的官方下载地址 Vue推荐博客:keepfool 在你的程序中快速引入Vue: <!-- 开发环境版本,包 ...
- nova 为何要做互信
1.计算节点为什么要做nova 的互信? nova 做resize 或者冷迁移需要两台计算节点做互信. 原因:resize(冷迁移)实际上是运行scp 文件到另一台主机上,如下的命令 Command: ...