这让我很困惑。我仍然是 Rails 的新手,所以它可能很简单。
情况:
- 我可以将商品添加到购物车,没问题。一切正常, current_cart 方法在每个请求中解析为同一个购物车。
- 但是,一旦我从购物车中删除了一个订单项,它就会起作用,该订单项被删除,但是
变量“session [:cart_id]”变为空,并且
在下次调用 current_cart 时创建了一个新的购物车。
我正在使用设计,所以我不确定这是否与它有关,或者行项目删除方法可能是级联删除会话或类似的东西。
问题是,谁能帮我理解为什么在调用 line_item delete 后会话变量变为空?
我创建了一个购物车应用程序,以及使用 Rails 进行敏捷 Web 开发。首先,这是应用程序控制器检索当前购物车的代码:
private
def current_cart
Checkout::Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound
cart = Checkout::Cart.create
session[:cart_id] = cart.id
cart
end
现在是我的订单项控制器的代码
类 Checkout::LineItemsController < ApplicationController
# POST /checkout/line_items # POST /checkout/line_items.json def create
@cart = current_cart product = Catalog::Product.find(params[:product_id]) apparel_event_log.info (product.to_json) @checkout_line_item = @cart.line_items.find_or_initialize_by_sku_id(product.part_number) new_quantity = @checkout_line_item.quantity || 0 @checkout_line_item.quantity = new_quantity+1 @checkout_line_item.line_item_description = product.name @checkout_line_item.image = product.primary_image respond_to do |format| if @checkout_line_item.save format.html { redirect_to @checkout_line_item.cart, notice: 'Line item was successfully created.' } format.json { render json: @checkout_line_item, status: :created, location: @checkout_line_item } else format.html { render action: "new" } format.json { render json: @checkout_line_item.errors, status: :unprocessable_entity } end end end
# DELETE /checkout/line_items/1 # DELETE /checkout/line_items/1.json def destroy Checkout::LineItem.delete(params[:id])
respond_to do |format| format.html { redirect_to current_cart, notice: 'Line item removed.' } format.json { head :no_content } end end end
以及订单项模型的代码
class Checkout::LineItem < ActiveRecord::Base
before_save :default_values
attr_accessible :customer_update_date, :inventory_status, :line_item_color, :line_item_description, :line_item_size, :line_item_tagline, :line_item_total, :image, :quantity, :sku_id, :style_id, :tax, :tax_code, :timestamps, :unit_price, :cart, :product
belongs_to :cart
belongs_to :product, :class_name => 'Catalog::Product'
has_one :image, :class_name => 'Assets::Medium'
def default_values
Rails.logger.debug { "Entering default values" }
self.quantity ||= 0
end
end