2016-06-28 52 views
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 

回答

1

我希望檢索一階。

這條線:

@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 
+0

它在application_controller.rb定義,它看起來是這樣的:是helper_method:current_order'高清current_order 如果會話![:ORDER_ID] .nil? Order.find(會話[:ORDER_ID]) 其他 Order.new 結束 end' –

+1

好吧,我不知道在哪裏'會話[:ORDER_ID]'是從哪裏來的,但也許你想要將其更改爲'Order.find(session [:order_id])|| Order.find_by_user_id(current_user.id)'。你自己寫了這些代碼嗎?你知道如何編程嗎? – jrochkind

+0

不,我不是自己寫的,它是從這個教程:https://richonrails.com/articles/building-a-shopping-cart-in-ruby-on-rails –

相關問題