rails在redirect_to或者在控制器中渲染后会做什么?

时间:2011-12-20 06:57:49

标签: ruby-on-rails-3

例如,我的控制器中有这样的东西

def save
  ...
  render 'error' if user.nil?
  @cast = user.cast
  render 'cast'
end

所以我没有:这里没有方法错误(在user.cast中)。但是,如果我使用redirect_to代替render,那么所有工作都会完美。

因此看起来rails在渲染后不会停止其执行堆栈,但在redirect_to之后停止。不是吗?

3 个答案:

答案 0 :(得分:3)

你的假设是正确的。 redirect_to向用户的浏览器发送HTTP 302重定向消息,告诉它转到不同的URL,从而停止当前的执行。

我建议查看这篇文章:http://blog.markusproject.org/?p=3313

他总结了如何使用每一个:

  

render将使用实例变量呈现特定视图   在行动中可用。例如,如果渲染用于新的   动作,当用户转到/ new时,控制器中的新动作是   调用后,创建实例变量然后传递给new   视图。 Rails为该视图创建html并将其返回给   用户的浏览器。这是您认为正常的页面加载。

     

redirect_to会向用户的浏览器发送重定向信息   重新申请新网址。然后浏览器将向其发送新请求   URL和它将通过该URL的操作,不知道   它被重定向到的事实。没有创建的变量   导致重定向的操作将可用于重定向   视图。当您单击表单中的“创建”时会发生这种情况   创建对象后,您将被重定向到编辑视图   对象

答案 1 :(得分:1)

为了您的工作示例,您可以将行更改为

render('error') and return if user.nil?

答案 2 :(得分:0)

例如,您可以在render之后使用记录器。 redirect_to暂停其方法执行。