我在铁路上的商店工作。由于我是Rails的新手,我正在学习如何创建购物车和订购系统的一些教程。
所以现在,在每个新会话中添加order_item到购物车时,用户会自动创建并保存具有唯一ID的订单。这就是问题所在。
我希望订单持续到30天过去(首先创建的一个订单,即用户添加第一个order_item时)。接下来的问题是:因此,如果用户添加了order_items,他会创建一个订单然后退出并返回并向他的购物车添加新的order_item,即使已经将旧订单保存到数据库,也会创建新订单。我想要检索第一个订单。
你能告诉我如何实现这个目标吗?
perlocation.name
order_item.rb
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.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
user.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
答案 0 :(得分:2)
我想检索第一个订单。
这一行:
@order = current_order
current_order
在哪里定义?您希望它找到现有订单(如果存在),而不是创建新订单。类似的东西:
def current_order
order = Order.find_by_user_id(current_user.id)
if order.nil?
order = Order.create (...etc)
end
order
end