【问题标题】:Rails Shopping Cart - not adding to current orderRails 购物车 - 不添加到当前订单
【发布时间】:2015-12-04 13:11:14
【问题描述】:

Rails noob 在这里。

我正在构建一个基本的购物车,它之前运行良好。在不更改任何代码的情况下(我 git reset --hard to my prev commit where it was working)它坏了。 (?!?)这是细分:

Github 仓库:https://github.com/christinecha/michaka

  • 创建产品。 ✓

  • 将产品 ID 添加到新订单项。 ✓

  • 将订单项目添加到订单。 ✓

--

可能的问题

! - 新订单在您创建订单项目时不断创建 = 购物车始终为空。

! - 购物车未连接到正确的订单 ID

! - 正在触发新会话 = 新订单 = 问题

--

订单项目控制器

    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'

订单型号

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

应用程序控制器

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

【问题讨论】:

  • 你尝试调试了吗? OrderItemsController#create - session[:order_id] = @order.id 有效吗? application_controller#current_order 中的 session[:order_id] 的值是多少?
  • 你的浏览器可能有问题?
  • 不幸的是,@denys281 似乎不是浏览器问题。 session[:order_id] 的值为 current_order.id(参见 OrderItems Controller)
  • 你调试 current_order 方法了吗?

标签: ruby-on-rails ruby session e-commerce cart


【解决方案1】:

看起来 ProductsController#create 被调用了两次,一次是 html 格式,一次是 json。

我认为您正在通过 ajax 提交一些数据,但仍在从表单发出发布请求。但是,您的控制器在其 format.html 响应中会在所有 javascript 操作完成之前重定向。

由于您只保存@order 并从OrderItemsController#create 设置会话,这是在您初始ajax().success 之后由js 调用的,因此收到重定向时它是不完整的。

我认为点击会发生什么:

  1. ajax 发布请求和常规形式发布
  2. ajax 成功 -> 提交#order_item_product_id 表单
  3. 由原始表单回复重定向

我建议要么重新设计提交流程以通过常规表单提交或完全通过 js 提交。例如,您可以禁用表单中的帖子并将 OrderItemsController#create 更改为最终重定向(通过 js)render :js =&gt; "window.location.href = '/cart';"

【讨论】:

  • 乐于提供帮助,而且我经常在此过程中学到一些东西 :-)
猜你喜欢
  • 1970-01-01
  • 2023-03-20
  • 2023-04-05
  • 1970-01-01
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
相关资源
最近更新 更多