Ruby on rails 3 rails在重定向到控制器或在控制器中渲染后做什么?
例如,我的控制器中有这样的smthRuby on rails 3 rails在重定向到控制器或在控制器中渲染后做什么?,ruby-on-rails-3,Ruby On Rails 3,例如,我的控制器中有这样的smth def save ... render 'error' if user.nil? @cast = user.cast render 'cast' end 所以我这里没有nil:no方法错误(在user.cast中)。但是如果我使用重定向到而不是渲染,那么所有这些都可以完美地工作 所以看起来rails在渲染之后并没有停止它们的执行堆栈,而是在重定向到之后停止。不是吗?例如,您可以在渲染后使用记录器重定向到将停止其方法执行。您的假设是正确的red
def save
...
render 'error' if user.nil?
@cast = user.cast
render 'cast'
end
所以我这里没有nil:no方法错误(在user.cast
中)。但是如果我使用重定向到
而不是渲染
,那么所有这些都可以完美地工作
所以看起来rails在渲染之后并没有停止它们的执行堆栈,而是在重定向到之后停止。不是吗?例如,您可以在渲染后使用记录器<代码>重定向到将停止其方法执行。您的假设是正确的
redirect_to
向用户的浏览器发送HTTP 302重定向消息,告诉用户转到其他URL,从而停止当前执行
我建议您查看以下帖子:
他对如何使用每种方法都做了一个很好的总结:
render将使用实例变量渲染特定视图
在行动中可用。例如,如果渲染用于新的
操作,当用户转到/new时,控制器中的新操作为
调用时,将创建实例变量,然后将其传递给新的
看法Rails为该视图创建html并将其返回给
用户的浏览器。这就是你通常认为的页面负载。
redirect_to将向用户的浏览器发送重定向,告诉它
重新请求一个新的URL。然后浏览器将向该用户发送一个新请求
URL,它将执行该URL的操作,而不会被
它被重定向到的事实。中创建的任何变量
导致重定向的操作将对重定向的用户可用
看法这是当您单击表单中的“创建”并
将创建对象,并将您重定向到该对象的编辑视图
反对
为了让您的示例发挥作用,您可以将行更改为
render('error') and return if user.nil?