2012-06-27 74 views
0

我在一家網上商店中購買了我的Rails模型,我使用具有訂單項的購物車進行設置。每次點擊某個產品時,都會生成一個訂單項,該訂單項具有唯一的購物車ID,與我爲用戶會話創建的購物車相匹配(本示例來自帶有導軌的Agile Web Development一書。)Ruby on 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 

所以,我想用6 cart_id用戶知道他們有3項。謝謝。

回答

0

是的,還有更好的辦法。你的模型如何設置?基本上你會希望用戶有一個購物車和一個購物車belongs_to一個用戶。此外,由於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

0

我想通了使用控制檯

選擇購物車後,使@cart.id = 6current_cart = Cart.find(6)因爲控制檯沒有使用瀏覽器會話中設置的車)

@count = 0 

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

必須有一個更好的,更railsy方式,雖然...

+0

如果」如下所述設置了你的關聯,你不需要查詢所有line_items只是爲了檢查它們中有多少個 – corroded

0
current_cart.line_items.size 

前提是你有在cart.rb

以下個
has_many :line_items 

CNC中

行動,對不起,你想要數量的總和。

current_cart.line_items.sum('quantity') 
相關問題