由于最近老是在表单提交后出现没有反应的现象,发现是在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的更多相关文章

  1. 深刻理解render 和 redirect_to

    深刻理解render 和 redirect_to http://www.blogjava.net/fl1429/archive/2009/03/12/259403.html 由于最近老是在表单提交后出 ...

  2. Atitit 图像处理 深刻理解梯度原理计算.v1 qc8

    Atitit 图像处理 深刻理解梯度原理计算.v1 qc8 1.1. 图像处理  梯度计算  基本梯度 内部梯度 外部梯度 方向梯度1 2. 图像梯度就是图像边缘吗?2 1.1. 图像处理  梯度计算 ...

  3. 深刻理解Java中final的作用(一):从final的作用剖析String被设计成不可变类的深层原因

    声明:本博客为原创博客,未经同意,不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(原文链接为http://blog.csdn.net/bettarwang/article/det ...

  4. for循环,你深刻理解了吗?

    前几天,有一个面试机会,去看了看,遇到一个认为不错的面试题!   过了几天看到csdn上说华为的一道面试题,看了下和我遇到的很相似!   我分享出来希望大家有帮助!   你真的深刻理解for循环了吗? ...

  5. 深刻理解iosBlock

    深刻理解iosBlock ///一个控制器里的方法 - (void)setRefreshHeader { ACWeakSelf(self); self.tableView.mj_header = [M ...

  6. javascript 面向对象程序设计--深刻理解对象

    javascript中,每个对象都是基于一个引用类型创建的,我们可以把ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数. 深刻理解对象 创建自定义对象的最简单方式就 ...

  7. [转]深刻理解Python中的元类(metaclass)以及元类实现单例模式

    使用元类 深刻理解Python中的元类(metaclass)以及元类实现单例模式 在看一些框架源代码的过程中碰到很多元类的实例,看起来很吃力很晦涩:在看python cookbook中关于元类创建单例 ...

  8. Nodejs第一天-{Nodejs基础 深刻理解浏览器 环境变量 基础语法}

    Nodejs第一天 1.什么是Nodejs ​ Nodejs是一个可以运行(解析)ECMAScript的环境; ​ ECMAScript是规定了一些列的语法 ,这些语法想要解析的执行就需要放在某个环境 ...

  9. C++ 类的多态一(virtual关键字--构造函数深刻理解)

    //virtual关键字--构造函数深刻理解 #include<iostream> using namespace std; /* C语言编译器,c++编译器全部是静态链编,就是一段一段代 ...

随机推荐

  1. Django之CURD插件

    什么是CURD? CURD顾名思义就是create,update,rearch,delete(所谓的增删改查). 当我们接到一个项目的时候,夸夸夸的就写完表结构,然后就一直写增删改查,增删改查,写了一 ...

  2. 我的Android进阶之旅------>FastJson的简介

    在最近的工作中,在客户端和服务器通信中,需要采用JSON的方式进行数据传输.简单的参数可以通过手动拼接JSON字符串,但如果请求的参数过多,采用手动拼接JSON字符串,出错率就非常大了.并且工作效率也 ...

  3. 我的Android进阶之旅------>Android疯狂连连看游戏的实现之状态数据模型(三)

    对于游戏玩家而言,游戏界面上看到的"元素"千变万化:但是对于游戏开发者而言,游戏界面上的元素在底层都是一些数据,不同数据所绘制的图片有所差异而已.因此建立游戏的状态数据模型是实现游 ...

  4. strstr使用

    extern char strstr(char str1, const char *str2); 语法: strstr(str1,str2) str1: 被查找目标 string expression ...

  5. Swap file "/etc/.hosts.swp" already exists! [O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it,

    非正常关闭vi编辑器时会生成一个.swp文件 非正常关闭vi编辑器时会生成一个.swp文件 关于swp文件 使用vi,经常可以看到swp这个文件,那这个文件是怎么产生的呢,当你打开一个文件,vi就会生 ...

  6. C#仿QQ设置界面导航

    效果预览,选择左边标签,右边内容会自动滚动到适当位置 public class AnchorPanel { List<PanelMenu> lst = new List<PanelM ...

  7. PHP新写的大转盘抽奖源码

    中奖概率 抽奖大转盘演示:http://www.sucaihuo.com/php/3301.html function getRand($proArr, $proCount) { $result = ...

  8. matlab中的科学记数法变成小数形式

    例如:假如rectx的形式在命令窗口显示: rectx = 1.0e+05 * 5.2294 5.2294 5.2294 5.2294 5.2294 那么,命令窗口输入vpa(rectx): ans ...

  9. Mysql远程链接访问权限设置

    Host 'XXX' is not allowed to connect to this MySQL server 解决方案/如何开启MySQL的远程帐号 如何开启MySQL的远程帐号-1)首先以 r ...

  10. Git教程(二)-如何上传和同步自己的git项目

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! Git接触并使用多年, 工作中使用较多,它的分布式存储,使每个人的电脑均为服务器的策略非常棒:再加上 ...