Carrito de compras de Rails – no se agrega a la orden actual

Rails noob aquí.

Estoy construyendo un carrito de compras básico y funcionaba perfectamente antes. Sin cambiar ningún código (no pude reiniciarlo, no pude reiniciarlo), se rompió. (?!?) Aquí está el desglose:

Github Repo: https://github.com/christinecha/michaka

  • Crea un producto. ✓

  • Agrega ID de producto a un nuevo artículo de pedido. ✓

  • Agrega un artículo de pedido a un pedido. ✓

Posibles problemas

! – Los nuevos pedidos se siguen creando a medida que crea artículos de pedido = el carrito siempre está vacío.

! – El carrito no se conecta a la ID de pedido correcta

! – Se están activando nuevas sesiones = nuevas órdenes = problema

PEDIDO DE CONTROL DE ARTÍCULOS

class OrderItemsController < ApplicationController def create @order = current_order @order_item = @order.order_items.new(order_item_params) @order.save session[:order_id] = @order.id end def update @order = current_order @order_item = @order.order_items.find(params[:id]) @order_item.update_attributes(order_item_params) @order_items = @order.order_items end def destroy @order = current_order @order_item = @order.order_items.find(params[:id]) @order_item.destroy @order_items = @order.order_items end private def order_item_params params.require(:order_item).permit(:quantity, :product_id) end end 

SESSION_STORE.RB

 Rails.application.config.session_store :cookie_store, key: '_bead-project_session' 

MODELO DE PEDIDO

 class Order < ActiveRecord::Base belongs_to :order_status has_many :order_items 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 def subtotal_cents subtotal * 100 end private def set_order_status self.order_status_id = 1 end def update_subtotal self[:subtotal] = subtotal end end 

CONTROLADOR DE APLICACION

 class ApplicationController < ActionController::Base protect_from_forgery with: :exception helper_method :current_order def current_order if !session[:order_id].nil? Order.find(session[:order_id]) else Order.new end end end 

Parece que ProductsController # create se llama dos veces, una vez con formato html y una vez como json.

Creo que estás enviando algunos de tus datos a través de ajax pero aún estás haciendo una solicitud de publicación desde el formulario. Sin embargo, su controlador, en su format.html respuesta se está redirigiendo antes de que todas las acciones de javascript se hayan completado.

Ya que solo guarda @order y configura la sesión desde OrderItemsController # create, que js llama después de su éxito inicial ajax ()., Está incompleto cuando se recibe la redirección.

Lo que creo que pasa al hacer clic:

  1. Ajax post request y post de forma regular
  2. ajax success -> submit #order_item_product_id form
  3. redirigido por respuesta original

Yo sugeriría rediseñar el proceso de envío para enviarlo por correo ordinario o completamente a través de js. Por ejemplo, podría deshabilitar la publicación desde el formulario y cambiar OrderItemsController # create para finalmente redirigir (a través de js) render :js => "window.location.href = '/cart';"

    Intereting Posts