Ruby on rails 3 rails在重定向到控制器或在控制器中渲染后做什么?

Ruby 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

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

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?