Rails basket - not an addition to the current order

Rails noob is here.

I am creating a basic shopping cart and it worked great before. Without changing any code (I git reset - in my preview, when it worked), it broke. (?!?) Here is the breakdown:

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

  • Creates a product.

  • Adds a product identifier to a new order item.

  • Adds an order item to the order.

-

Possible problems

! - New orders are saved when creating order items. The cart is always empty.

! - The basket does not connect to the correct order ID

! - new sessions start = new orders = problem

-

CONTROLLER CONTROLLERS

    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'

ORDER MODEL

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

CONTROLLER APPLICATIONS

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
+4
1

, ProductController # create , html json.

, ajax, . , format.html , javascript .

@order OrderItemsController # create, js ajax(), .

, , :

  • ajax post request
  • ajax success → #order_item_product_id

, , js. , OrderItemsController # create, , , ( js) render :js => "window.location.href = '/cart';"

+1

Source: https://habr.com/ru/post/1606469/


All Articles