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。を省略した場合、リダイレクトが発生する前returnOrder.newステートメントが実行されます。

于 2013-11-12T09:14:54.620 に答える
0

リダイレクト先

  • ウェブサーバーへの新しいリクエストをトリガーします

戻る

  • 明示的なリターンを設定すると、早期に抜け出すことができ、return キーワードの後に​​リターンがあるものは何でも実行しません。
于 2013-11-12T09:13:28.260 に答える
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 に答える