0
我正在使用rails的商店。由于我是Rails的新手,我正在关注如何创建购物车和订购系统的一些教程。如何在每个会话上保持相同的顺序?
所以,现在订单中带有唯一标识符的订单正在由用户自动创建并保存,每次新建会话时都会向订单中添加一个order_item。这是问题。
我想要订单持续到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
user.rb
has_many :order
它在application_controller.rb定义,它看起来是这样的:是helper_method:current_order'高清current_order 如果会话![:ORDER_ID] .nil? Order.find(会话[:ORDER_ID]) 其他 Order.new 结束 end' –
好吧,我不知道在哪里'会话[:ORDER_ID]'是从哪里来的,但也许你想要将其更改为'Order.find(session [:order_id])|| Order.find_by_user_id(current_user.id)'。你自己写了这些代码吗?你知道如何编程吗? – jrochkind
不,我不是自己写的,它是从这个教程:https://richonrails.com/articles/building-a-shopping-cart-in-ruby-on-rails –