0

Rails モデルをオンライン ストアに置いて、品目を含むカートを設定しています。製品がクリックされるたびに、ユーザー セッション用に作成したカートと一致する一意のカート ID を持つ項目が生成されます (この例は、Agile Web Development with rails という本から引用しています)。

ユーザーのカート内のアイテムの数を数えたいのですが、これを行う最善の方法は何ですか?

ここに何の例があります

li.each do |line|
     puts li.to_yaml
end

出力 ....

- !ruby/object:LineItem
  attributes:
    id: 14
    product_id: 81
    cart_id: 11
    created_at: 2012-06-27 14:10:09.060706000Z
    updated_at: 2012-06-27 14:10:09.060706000Z
    quantity: 1
---
- !ruby/object:LineItem
  attributes:
    id: 1
    product_id: 2
    cart_id: 6
    created_at: 2012-06-25 18:29:20.726280000Z
    updated_at: 2012-06-25 18:56:08.690670000Z
    quantity: 2
- !ruby/object:LineItem
  attributes:
    id: 2
    product_id: 4
    cart_id: 6
    created_at: 2012-06-25 18:56:10.014333000Z
    updated_at: 2012-06-25 18:56:10.014333000Z
    quantity: 1

したがって、cart_id が 6 のユーザーに、3 つのアイテムがあることを知らせたいと思います。ありがとう。

4

3 に答える 3

0

はい、もっと良い方法があります。モデルはどのように設定されていますか? 基本的に、ユーザーにカートを持たせ、カートはユーザーに属します。また、line_item には cart_id があるため、line_item belongs_to cart と cart has_many line_items を持つことができます。

これらの関連付けを使用すると、次のように必要なものを簡単に取得できます。

cart.line_items.count

user.cart

user.cart.line_items

ここでレール協会について読むことができます:

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

于 2012-06-27T15:25:06.973 に答える
0

コンソールを使用してそれを理解しました

カートを選択した後@cart.id = 6(current_cart = Cart.find(6)コンソールがブラウザー セッションを使用してカートを設定しなかったため)

@count = 0

LineItem.all.each do |item|
     if (item.cart_id == @cart.id)
       @count += item.quantity
     end
end

ただし、より良い、よりレールのような方法があるはずです...

于 2012-06-27T15:19:47.157 に答える
0
current_cart.line_items.size

あなたがcart.rbに以下を持っている場合

  has_many :line_items

-編集-

申し訳ありませんが、数量の合計が必要でした。

current_cart.line_items.sum('quantity')
于 2012-06-27T15:22:41.180 に答える