【发布时间】:2012-10-22 11:53:11
【问题描述】:
这个让我很困惑。我还是 Rails 的新手,所以可能很简单。
情况:
- 我可以将商品添加到购物车,没问题。一切正常,current_cart 方法在每个请求中解析为同一个购物车。
- 但是,一旦我从购物车中删除了一个订单项,它就可以工作了,该订单项被删除了,但是
变量“session[:cart_id]”变为空,一个新的购物车得到
下次调用 current_cart 时创建。
我正在使用 Devise,所以我不确定这是否与它有关,或者订单项删除方法可能是级联删除会话或类似的东西。
问题是,谁能帮我理解为什么调用 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
# POST /checkout/line_items # POST /checkout/line_items.json def 创建
@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# 删除 /checkout/line_items/1 # 删除 /checkout/line_items/1.json def 销毁 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
【问题讨论】:
-
您在开始修改书本示例之前是否检查过它是否正常工作?在任务 D 结束时检查所有测试是否仍然通过
-
这本书还可以,我已经过了这本书的学习阶段,并试图实现购物车的其余部分。这本书并没有真正涵盖我可以看到的删除行项目。
标签: ruby-on-rails ruby-on-rails-3