【发布时间】:2023-03-05 06:33:01
【问题描述】:
我正在 Rails 中的一家商店工作。由于我是 Rails 新手,因此我正在关注一些关于如何创建购物车和订购系统的教程。
因此,现在用户会在每次新会话中将 order_item 添加到购物车时自动创建和保存具有唯一 ID 的订单。这就是问题所在。
我希望订单持续到 30 天(第一个创建的订单,即用户添加第一个 order_item 时)。接下来的问题是:因此,如果用户添加了 order_items,他创建了一个订单,然后注销并返回并将新的 order_item 添加到他的购物车中,即使他的旧订单已经保存到数据库中,也会创建新订单。我想找回第一个订单。
你能告诉我如何做到这一点吗?
class OrderItemsController < ApplicationController
def create
@order = current_order
@order_item = @order.order_items.new(order_item_params)
@order.user_id = current_user.id
@order.save
session[:order_id] = @order.id
respond_to do |format|
format.js { flash[:notice] = "ORDER ITEM HAS BEEN ADDED." }
end
end
order_item.rb
class OrderItem < ActiveRecord::Base
belongs_to :product
belongs_to :order
validates_associated :order
validates :quantity, presence: true, numericality: { only_integer: true, greater_than: 0 }
validate :product_present
validate :order_present
before_save :finalize
def unit_price
if persisted?
self[:unit_price]
else
product.price
end
end
def total_price
unit_price * quantity
end
private
def product_present
if product.nil?
errors.add(:product, "is not valid or is not active.")
end
end
def order_present
if order.nil?
errors.add(:order, "is not a valid order.")
end
end
def finalize
self[:unit_price] = unit_price
self[:total_price] = quantity * self[:unit_price]
end
end
order.rb
class Order < ActiveRecord::Base
belongs_to :order_status
belongs_to :user
has_many :order_items
validates_length_of :order_items, maximum: 3
before_create :set_order_status
before_save :update_subtotal
def subtotal
order_items.collect { |oi| oi.valid? ? (oi.quantity * oi.unit_price) : 0 }.sum
end
private
def set_order_status
self.order_status_id = 1
end
def update_subtotal
self[:subtotal] = subtotal
end
end
用户.rb
has_many :order
【问题讨论】:
标签: ruby-on-rails ruby