处理redirect_to

时间:2013-11-12 09:06:19

标签: ruby-on-rails

我的控制器中有以下代码:

def new
  if @cart.line_items.empty?
    redirect_to store_url, notice: 'Your cart is empty'
    return
  end

  @order = Order.new
end

我有以下问题:

  1. 当控制器执行redirect_to语句时会发生什么?它是否将控制传递给商店控制器并停止执行操作new?它是否执行returnOrder.new语句?
  2. 此处return声明的目标是什么?

4 个答案:

答案 0 :(得分:1)

  • 当控制器执行redirect_to语句时会发生什么?

它会触发对您的网络服务器的新请求

  • 是否将控制传递给商店控制器并停止执行新操作?

它没有从控制器传递到控制器,它告诉浏览器转到另一个控制器。所以它不在您的应用内部。

  • 是否执行return和Order.new语句?
一旦你的控制器在未被触摸后到达return所有内容,

就会发生重定向

  • 这里的return语句的目标是什么?

你必须明确告诉控制器你在这种情况下完成了

答案 1 :(得分:1)

redirect_to只是方法调用。它注意到控制器动作在动作完成后发出HTTP 302(而不是渲染某些视图)的愿望。在redirect_to方法返回后,操作继续执行,因此不会完全传递控制流。

因此,在return中安排重定向后,您需要在此处使用redirect_to来停止执行操作。如果您省略return,则在重定向发生之前将执行Order.new语句。

答案 2 :(得分:0)

redirect_to

  • 触发对您的网络服务器的新请求

返回

  • 如果你提出明确的回报,那么它允许你提前分手,并且在你的return关键字之后不执行你返回的任何内容

答案 3 :(得分:0)

你也可以写这个

def new
   return redirect_to store_url, notice: 'Your cart is empty' if @cart.line_items.empty?
   @order = Order.new 
end