我是一名新的铁路开发商,负责建立一个干洗服务网站。
用户将选择他们想要拾取的物品数量,裤子,衬衫等。
这是我的表:
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来更新所选择的数据库。如果选择了所选项目,请将所选项目添加到订单数据库中并汇总订单总额?
对不起,没有问题,提前谢谢!
答案 0 :(得分:1)
我实际上最近建立了一个电子商务,所以这就是我所做的。
我创建了名为Cart
和CartItem
的单独模型。您只需将模型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
。