0

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

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?它是否执行returnandOrder.new语句?
  2. 这里声明的目标是什么return
4

4 回答 4

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

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

  • 它是否将控制权传递给存储控制器并停止执行新的操作?

它不会从控制器传递到控制器,而是告诉浏览器转到另一个控制器。所以它不是您的应用程序的内部。

  • 它是否执行 return 和 Order.new 语句?

return一旦您的控制器在未触及之后到达所有内容,就会发生重定向

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

在这种情况下,您必须明确告诉控制器您已完成

于 2013-11-12T09:12:14.953 回答
1

redirect_to只是一个方法调用。它记录了控制器操作在操作完成后发出 HTTP 302(而不是呈现某些视图)的愿望。方法返回后redirect_to,动作继续执行,因此并没有完全传递控制流。

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

于 2013-11-12T09:14:54.620 回答
0

你也可以这样写

def new
   return redirect_to store_url, notice: 'Your cart is empty' if @cart.line_items.empty?
   @order = Order.new 
end
于 2013-11-12T09:25:46.133 回答
0

重定向到

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

返回

  • 如果您放置显式返回,那么它允许您提前突破并且不执行您在 return 关键字之后返回的任何内容
于 2013-11-12T09:13:28.260 回答