例如,我的控制器中有这样的东西
def save
...
render 'error' if user.nil?
@cast = user.cast
render 'cast'
end
所以我没有:这里没有方法错误(在user.cast
中)。但是,如果我使用redirect_to
代替render
,那么所有工作都会完美。
因此看起来rails在渲染后不会停止其执行堆栈,但在redirect_to之后停止。不是吗?
答案 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
暂停其方法执行。