3

Rails ブック (最新版) を使用した有名なアジャイル Web 開発からこのスニペットを取得します。

def create 

  @cart = current_cart 

  product = Product.find(params[:product_id])

  @line_item = @cart.line_items.build(product: product)

これは一般的な e コマース/デポ アプリ用で、この関数は特定の商品の [カートに追加] ボタン用です。ここで私は混乱しています:

コードは次のように想像しました:

@line_item = line_items.build(product: product) 

@line_item = line_items.build(cart: @cart) 

基本的line_itemに が商品とカートの両方に属している場合は、それらの関係を別々に作成します。

また、カートにline_itemsまだ何も入っていない場合、どうすればよい@cart.line_itemsですか? line_items.build(product: product)がオブジェクトを返すことは理解していline_itemます (これを に保存します@line_item) 。 cart.line_itemsline_items

4

2 に答える 2

2

モデルには、と呼ばれるモデルとの関連付けがあるCart可能性が最も高いです。Rails は、その関連付けを空の配列で自動的に初期化します。has_manyLineItemline_items

@cart次のように初期化されると考えることができます。

@cart = Cart.new
@cart.line_items = []

call を追加するたびに、次@cart.line_items.buildのように考えてください。

new_line_item = LineItem.new cart: @cart
@cart.line_items.push new_line_item

注: これは実際のコードの動作とはまったく異なりますが、機能的な動作は同じと考えることができます。

于 2012-07-19T05:03:29.013 に答える