전자 상거래 앱을 개발 중이며 사용자가 장바구니에 제품을 추가 할 때 제품 재고 수량을 업데이트 할 수있는 방법을 모르겠습니다. 나는 총 초보자이기 때문에이 응용 프로그램의 대부분에 대한 자습서를 따랐다. 그러나 사용자가 장바구니에 제품을 추가 할 때 제품 재고량을 업데이트하는 방법에 대한 자습서는 제공되지 않습니다.레일 앱의 장바구니 수량을 기준으로 재고 수량 업데이트 중?
지금까지 나는 cart.rb
모델에이 방법을 추가 한
def upd_quantity
if cart.purchased_at
product.decrement!(quantity: params[:stock_quantity])
end
end
그러나 미안 정말 붙어 내가 을 누군가가 봐 수 있다면 그것은 좋은 것 뭘하는지 모른다 이 부분을 읽고 앱에이 기능을 구현하는 방법을 알려주세요. 여기
는 github의의의 repo 내가 지금 무엇을 https://github.com/DadiHall/brainstore이에 대한 링크입니다.
cart_item.rb
모델
class CartItem
attr_reader :product_id, :quantity
def initialize product_id, quantity = 1
@product_id = product_id
@quantity = quantity
end
def increment
@quantity = @quantity + 1
end
def product
Product.find product_id
end
def total_price
product.price * quantity
end
def upd_quantity
if cart.purchased_at
product.decrement!(quantity: params[:stock_quantity])
end
end
end
cart.rb
모델
class Cart
attr_reader :items
def self.build_from_hash hash
items = if hash ["cart"] then
hash["cart"] ["items"].map do |item_data|
CartItem.new item_data["product_id"], item_data["quantity"]
end
else
[]
end
new items
end
def initialize items = []
@items = items
end
def add_item product_id
item = @items.find { |item| item.product_id == product_id }
if item
item.increment
else
@items << CartItem.new(product_id)
end
end
def empty?
@items.empty?
end
def count
@items.length
end
def serialize
items = @items.map do |item|
{
"product_id" => item.product_id,
"quantity" => item.quantity
}
end
{
"items" => items
}
end
def total_price
@items.inject(0) { |sum, item| sum + item.total_price }
end
end
product.rb
모델
class Product < ActiveRecord::Base
mount_uploader :image, ImageUploader
validates_presence_of :name, :price, :stock_quantity
validates_numericality_of :price, :stock_quantity
belongs_to :designer
belongs_to :category
belongs_to :page
def self.search(query)
where("name LIKE ? OR description LIKE ?", "%#{query}%", "%#{query}%")
end
end
`cart_controller.rb`
class CartsController < ApplicationController
before_filter :initialize_cart
def add
@cart.add_item params[:id]
session["cart"] = @cart.serialize
product = Product.find params[:id]
redirect_to :back, notice: "Added #{product.name} to cart."
end
def show
end
def checkout
@order_form = OrderForm.new user: User.new
@client_token = Braintree::ClientToken.generate
end
def remove
cart = session['cart']
item = cart['items'].find { |item| item['product_id'] == params[:id] }
if item
cart['items'].delete item
end
redirect_to cart_path
end
end
Ohhhh 예! 너무 많이 작동하지만 고맙습니다. 장바구니에 제품을 추가하면 재고 수량이 줄어들지 만 장바구니에서 제품을 제거하면 재고 수량이 다시 올라 가지 않습니다 – DaudiHell
편집을 참조하십시오. 제거 작업에 대한 제안 – matthewalexander
아주 좋은 제안이지만 'NoMethodError in CartsController # remove' 오류를줍니다. { "product_id"=> "14", "quantity"=> 1}에 대해 '정의되지 않은 메소드'stock_quantity '를 말함 :이 라인에서 해시'item = up.questity (item_quantity : item.stock_quantity +1)' – DaudiHell