我的控制器中有以下代码:
def new
if @cart.line_items.empty?
redirect_to store_url, notice: 'Your cart is empty'
return
end
@order = Order.new
end
我有以下问题:
redirect_to
语句时会发生什么?它是否将控制传递给商店控制器并停止执行操作new
?它是否执行return
和Order.new
语句?return
声明的目标是什么?答案 0 :(得分:1)
它会触发对您的网络服务器的新请求
它没有从控制器传递到控制器,它告诉浏览器转到另一个控制器。所以它不在您的应用内部。
return
所有内容,就会发生重定向
你必须明确告诉控制器你在这种情况下完成了
答案 1 :(得分:1)
redirect_to
只是方法调用。它注意到控制器动作在动作完成后发出HTTP 302(而不是渲染某些视图)的愿望。在redirect_to
方法返回后,操作继续执行,因此不会完全传递控制流。
因此,在return
中安排重定向后,您需要在此处使用redirect_to
来停止执行操作。如果您省略return
,则在重定向发生之前将执行Order.new
语句。
答案 2 :(得分:0)
redirect_to
返回
答案 3 :(得分:0)
你也可以写这个
def new
return redirect_to store_url, notice: 'Your cart is empty' if @cart.line_items.empty?
@order = Order.new
end