2

私は RoR の初心者で、「Pragmatic Agile Web Development」デポ アプリケーションを実行しようとしています。アプリケーションは、購入者がカートに追加したすべてのアイテムを追跡する必要があります。

Cart モデルの作成は次のとおりです。

rails generate scaffold cart

そして、これはアプリケーション コントローラーのコードです。

class ApplicationController < ActionController::Base

protect_from_forgery

private
  def current_cart
    Cart.find(session[:cart_id])
  rescue ActiveRecord::RecordNotFound
    cart = Cart.create
    session[:cart_id] = cart.id
    cart
  end
end

私の質問:

  1. 「足場」コマンドでは、このテーブルの列名を指定しませんでしたが、カートには「id」という列が 1 つあるようです。足場コマンドは「id」列を自動生成しますか?
  2. このレスキュー ブロックでは、「Card.id」に値を設定せずに、新しい Cart オブジェクトが作成されます。次の行で、この「id」値を「session[:cart_id] = cart.id」に割り当てます。保存される値は何ですか?

あなたの答えは高く評価されます、

ありがとう

4

1 に答える 1

2

1 の答え:はいidは、スキャフォールド ジェネレーターによって自動的に生成された、自動インクリメントされた id 列です。新しいエントリが作成されるたびに、新しい ID が生成されます。

2 問中 2 問の答え:cart_idはい。既にセッションに保存されているオブジェクトが見つからない限り、カートの新しいオブジェクトが作成されます。したがって、新しいカートを作成した後、cart_id将来の使用のために新しいセッションを保存します。current_cartコントローラーが再び関数を呼び出す次のリクエストと同様に、有効なcart_idfromsessionと対応するCartオブジェクトも取得します。

sessionセッションが ROR でどのように処理されるかをよく知らない場合は、これらのリンクをたどることができます。

紛らわしいことは何でも教えてください。

于 2012-11-01T09:28:47.780 に答える