像rails应用程序的购物车

时间:2017-07-22 20:25:12

标签: ruby-on-rails ruby

我是一名新的铁路开发商,负责建立一个干洗服务网站。

用户将选择他们想要拾取的物品数量,裤子,衬衫等。

这是我的表:

create_table "products", force: :cascade do |t|
  t.string   "name"
  t.decimal  "price"
  t.datetime "created_at",   null: false
  t.datetime "updated_at",   null: false
  t.string   "product_type"
  t.text     "image"
end

所有产品都保存在数据库中。我希望每个用户都能够在订单页面上选择服装的数量和类型以及数量。

如何添加订单总额并将交易添加到所有所选商品的最近订单历史记录中?

我相信一旦选中项目,我将需要jquery来更新所选择的数据库。如果选择了所选项目,请将所选项目添加到订单数据库中并汇总订单总额?

对不起,没有问题,提前谢谢!

1 个答案:

答案 0 :(得分:1)

我实际上最近建立了一个电子商务,所以这就是我所做的。 我创建了名为CartCartItem的单独模型。您只需将模型Phone切换为Product(或用于存储与产品相关的信息的模型(即:价格,可用数量等)

class CartItem < ApplicationRecord
  belongs_to :cart, {:optional => true}
  belongs_to :phone, {:optional => true}
end

class Cart < ApplicationRecord
  has_one :user
  has_many :cart_items
end

class Phone < ApplicationRecord
  has_many :cart_items
end

Cart模型没有属性。它的主要目的是保存不同的购物车。

CartItem模型有一个外键,它属于哪个购物车(cart_id)以及它所拥有的外键(phone_id)(你可以切换它)服装)。每个购物车项目只能有一部电话,以及该电话的相应数量。因此,您可以循环浏览@user.cart.cart_items并获取每件衣服以及与每件衣服相关的数量。

模型CartItem所需的属性:

t.integer  "cart_id"
t.integer  "phone_id"
t.integer  "quantity_sold" 

因此,使用这些模型及其各自的属性,您可以通过每次进入购物车页面时运行calculate_total方法来计算总计:

def calculate_totals
  phones_array = []
  if @user.cart.cart_items.present?
    @user.cart.cart_items.each do |item|
      phone_total = item.phone.price * item.quantity_sold
      phones_array << phone_total
    end
    @subtotal = phones_array.inject{|memo,n| memo + n}
    @tax_total = @subtotal * 0.13
    @total = @subtotal + @tax_total
  end
end

def cart
  calculate_totals
end

请注意,仅当@user包含购物车商品时才会运行。正如您可以看到的控制器方法calculate_totals,您基本上遍历您的购物车项目,获取每个项目的价格并将其乘以销售数量。然后结果存储在phones_array变量中。

要计算@subtotal,您只需将phones_array的所有元素添加到.inject即可。您可以通过将@tax_total乘以税率来获得@subtotal,并计算@total您只需@subtotal添加@tax_total