我是新手,正在构建购物车应用程序。它的作用是: 1.当用户登录时,他/她可以将产品添加到购物车。并将订单与该用户的ID保存在订单表中。 2.它由产品,订单,用户和订单项目表组成。 3.我使用种子来显示产品列表。
我想显示产品的可用库存,以及当用户输入数量并将产品添加到购物车时。当用户结帐时,可用库存应减少。
任何人都可以指导我使用什么方法以及在哪里编写这些方法?
编辑:我有如下的OrderItems控制器:
class OrderItemsController < ApplicationController
before_action :authenticate_user!
after_action :cart, only: %i[create update destroy]
def create
@order = current_order
@order_item = @order.order_items.new(order_item_params)
@order.save
session[:order_id] = @order.id
end
def remove_stock
product = @order.order_items.find(params[:id])
product.stock -= self.quantity
product.save
redirect_to cart_path
end
end
用于显示Cart的视图如下:carts / show.html.erb:
<h4 class='text-right'>Total Price: <span style='color: green'><%= number_to_currency order_item.total_price %></span></h4>
<%= link_to 'Buy', remove_stock(order_item) %>
<% end %>
单击“购买”按钮,应转到remove_stock方法,然后减少库存。但是,我不确定该遵循哪种路线。
有什么建议吗?
谢谢。
答案 0 :(得分:0)
我以这种方式尝试过,并且可以正常工作。但是,如果您问我这是否是最佳做法,我不确定。
我的模特: 1.用户(名称,电子邮件,密码字段,角色) 2.产品(名称,creator_id,available_quantity,单位,cost_per_unit) 3.订单(product_id,user_id,required_quired)
控制器: 1.users_controller 2.products_controller 3.orders_controller
我在“产品”页面上显示了具有可用数量的产品列表,输入以选择所需数量以及“添加到购物车”按钮
当用户输入所需数量并单击“添加到购物车”按钮时,我将按钮单击处理为ajax呼叫发送
{product_id:``,数量:'',user_id:``}
调用“添加到购物车” ajax时,由orders_controller的add_to_cart操作处理,该操作在orders表中创建一行,其中user_id,product_id和status为“ in_progress”。在创建行之前,我还要检查同一用户是否具有处于“ in_progress”状态的相同产品。如果是这样,我认为他已经更新了他的订单。在这种情况下,我将更新现有列。我在此处启用的另一项检查是检查所需数量是否小于或等于可用数量。
对于“从购物车中删除”,我遵循相同的ajax调用过程,区别在于它从订单表中删除了该列。
最后,当用户单击“结帐”按钮时,我得到所有处于“进行中”状态的订单,检查可用数量和所需的仍匹配的订单,然后将订单发送给开票。一旦开帐单/付款成功,请将进行中的订单状态标记为“完成”,然后在这里您必须调用update_stock方法或简单地更新产品的available_quantity 。