我在一个在线商店中有我的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个项目。感谢。
答案 0 :(得分: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
虽然......必须有一种更好,更多的方式......
答案 1 :(得分:0)
current_cart.line_items.size
如果您在cart.rb中有以下内容
has_many :line_items
-edit -
对不起,对不起,你想要数量的总和。
current_cart.line_items.sum('quantity')
答案 2 :(得分: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
等。
您可以在此处阅读rails协会:
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html