これは私を困惑させます。私はまだRailsの初心者なので、簡単かもしれません。
状況:
- カートにアイテムを追加できます。問題ありません。current_cart メソッドは、リクエストごとに同じカートに解決されます。
- しかし、カートから品目を削除するとすぐに機能し、品目は削除されますが、
変数「session[:cart_id]」は null になり
、次に current_cart が呼び出されたときに新しいカートが作成されます。
私はDeviseを使用しているので、それが何か関係があるのか どうかはわかりません。それとも、行項目の削除方法がセッションのカスケード削除などである可能性があります。
問題は、line_item delete を呼び出した後にセッション変数が null になる理由を理解できる人はいますか?
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
これで、広告申込情報コントローラーのコードが
class 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