精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-04-19
例如:我在 controller中find出来一个list,想在view中显示,这种情况只能用 render,render可以保存controller中变量的作用域 def index list=Product.find[...]; render :action => 'list' end 上面如果用 redirect,我在rhtml中就得不到 list了?我看代码好像也是可以的: redirect_to :action => 'list' 上面用了 redirect,在list中也是可以得到list值的。 具体有哪些区别呢 scaffold生成的代码: 其中这段: if @hotel.save flash[:notice] = 'Hotel was successfully created.' redirect_to :action => 'list' else render :action => 'new' end 有 render也有redirect,他们的作用都是跳转到另一个方法,有什么区别? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-04-19
render 好象没有执行想对应的controller方法!而redirect_to 有
|
|
返回顶楼 | |
发表时间:2007-04-19
render :action=>xxx跟render :template=>xxx,
redirect_to :action跟redirect_to url效果一致, 或为了找到要渲染的rhtml页面路径,或确认重定向的url地址。(如ddtlby所说,只是通过:action参数确定页面位置,不会执行action方法) 如果想在当前上下文执行新的action和template,用render_component。 对页面内容的复杂控制,个人感觉capture挺好用的。 另外,与j2ee不同,在action里调用render和redirect_to只是标记执行完该action后的动作,而不会立即执行动作。 如 def list @a = 3 render @a = 4 end list.rhtml中 <%= @a %> 会输出4. 理解它会避免犯直觉上的错误,理所当然认为调完render、redirect_to自动从action方法中返回是不对的。跟java处理方式差不多,惯用法是 render and return 从《ruby cookbook》中看来的。 |
|
返回顶楼 | |
发表时间:2007-04-21
render 表示当前渲染当前请求的返回结果,redirect 是返回 301 或 302,让浏览器去创建一个新的请求,所以 render 可以得到当前请求的参数、变量,而 redirect 不可以。
|
|
返回顶楼 | |
发表时间:2007-04-22
ddtlby 写道 render 好象没有执行想对应的controller方法!而redirect_to 有
多谢,这应该是核心的区别了! |
|
返回顶楼 | |
发表时间:2007-04-22
liusong1111 写道 render :action=>xxx跟render :template=>xxx,
redirect_to :action跟redirect_to url效果一致, 或为了找到要渲染的rhtml页面路径,或确认重定向的url地址。(如ddtlby所说,只是通过:action参数确定页面位置,不会执行action方法) 如果想在当前上下文执行新的action和template,用render_component。 对页面内容的复杂控制,个人感觉capture挺好用的。 另外,与j2ee不同,在action里调用render和redirect_to只是标记执行完该action后的动作,而不会立即执行动作。 如 def list @a = 3 render @a = 4 end list.rhtml中 <%= @a %> 会输出4. 理解它会避免犯直觉上的错误,理所当然认为调完render、redirect_to自动从action方法中返回是不对的。跟java处理方式差不多,惯用法是 render and return 从《ruby cookbook》中看来的。 capture 不知道是做什么用的? 这个赋值操作虽然可以在 render之后执行,但是一般都用在render之前赋值,这样比较符合习惯。 |
|
返回顶楼 | |
发表时间:2007-04-22
hozaka 写道 render 表示当前渲染当前请求的返回结果,redirect 是返回 301 或 302,让浏览器去创建一个新的请求,所以 render 可以得到当前请求的参数、变量,而 redirect 不可以。
“render 可以得到当前请求的参数” ??? render 是用来得到参数使用的? 你说它相当于一个 request ? |
|
返回顶楼 | |
发表时间:2007-04-24
对不起,我没表述清楚。
我的意思是并不是说 render 相当与一个 request。举个例子,比如当前请求有一个参数 a=1,当前 action a 的结果如果是 render 方法渲染的一个页面,那么这个 action a 内、对应的页面模板内都可以通过 params[:a] 得到这个参数;如果 action a 的结果是 redirect_to :action => 'b',那么就是告诉浏览器重新发一个请求到 action b,如果没有另外传递参数,那么 action b 是得不到 a=1 这个参数的。 至于在 action a 内执行 render :action => 'b',和 redirect_to 也有区别。前者只是让 rails 渲染 action b 对应的页面模板而已,并不会执行 action b 内的代码,而 redirect_to 因为是新的请求了,所以 action b 内的代码会在另一个请求里被执行。 |
|
返回顶楼 | |
发表时间:2007-04-24
引用 rails中的 render和redirect的对比可不可以看成是 render对应 j2ee中的forward,redirect就是 j2ee中的redirect(一个浏览器重定向)?
是。 |
|
返回顶楼 | |
发表时间:2007-04-24
hozaka 写道 对不起,我没表述清楚。
我的意思是并不是说 render 相当与一个 request。举个例子,比如当前请求有一个参数 a=1,当前 action a 的结果如果是 render 方法渲染的一个页面,那么这个 action a 内、对应的页面模板内都可以通过 params[:a] 得到这个参数;如果 action a 的结果是 redirect_to :action => 'b',那么就是告诉浏览器重新发一个请求到 action b,如果没有另外传递参数,那么 action b 是得不到 a=1 这个参数的。 至于在 action a 内执行 render :action => 'b',和 redirect_to 也有区别。前者只是让 rails 渲染 action b 对应的页面模板而已,并不会执行 action b 内的代码,而 redirect_to 因为是新的请求了,所以 action b 内的代码会在另一个请求里被执行。 前者只是让 rails 渲染 action b 对应的页面模板而已,并不会执行 action b 内的代码???? 这句话不太理解,呵呵.为什么会不执行里面的代码呢?不执行代码渲染什么? |
|
返回顶楼 | |