Ruby on Rails查找购物车中的商品数量

时间:2012-06-27 15:02:55

标签: ruby-on-rails-3

我在一个在线商店中有我的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个项目。感谢。

3 个答案:

答案 0 :(得分: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

虽然......必须有一种更好,更多的方式......

答案 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