私はレールの店で働いています。私がRailsを使い慣れていないので、私はショッピングカートと注文システムの作成方法に関するチュートリアルに従っていました。各セッションで同じ注文を維持するには?
これで、新しいセッションごとにorder_itemをカートに追加すると、一意のIDを持つ注文が作成され、ユーザーによって自動的に保存されます。これが問題です。
30日が経過するまで(最初に作成された注文、つまり、ユーザーによって最初のorder_itemが追加されたとき)、注文を維持したいと考えています。問題は次のとおりです。つまり、ユーザーがorder_itemsを追加すると、注文を作成してからログアウトして戻って新しい注文アイテムをカートに追加すると、すでに古い注文がデータベースに保存されていても新しい注文が作成されます。私はその最初の注文を取得したい。
どうすればいいですか?
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:!の[:ORDER_ID] .nilセッション場合 'DEF をcurrent_order current_order? Order.find(セッション[:ORDER_ID]) 他 Order.new エンド end' –
さて、私は 'セッションの場所がわからないんだけど[:ORDER_ID]'から、多分あなたはそれを変更したいれます'Order.find(セッション[:order_id])|| Order.find_by_user_id(current_user.id) '。このコードを自分で書いたのですか?あなたはプログラムする方法を知っていますか? – jrochkind
いいえ私はそれをこのチュートリアルから自分で書いていない:https://richonrails.com/articles/building-a-shopping-cart-in-ruby-on-rails –