加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails购物车 – 不添加当前订单

发布时间:2020-12-17 02:08:30 所属栏目:百科 来源:网络整理
导读:Rails noob在这里. 我正在构建一个基本的购物车,它之前的工作非常好.没有改变任何代码(我git reset – 硬到我工作的上一次提交)它就破了. (?!?)这是细分: Github Repo:https://github.com/christinecha/michaka 创建产品. ? 将产品ID添加到新订单项. ?
Rails noob在这里.

我正在构建一个基本的购物车,它之前的工作非常好.没有改变任何代码(我git reset – 硬到我工作的上一次提交)它就破了. (?!?)这是细分:

Github Repo: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

解决方法

看起来像ProductsController #create被调用两次,一次是格式化html,一次是json.

我认为您通过ajax提交了一些数据,但仍然从表单中提交了一个帖子请求.但是你的控制器,在它的format.html响应中,在所有的javascript动作完成之前重定向.

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

我认为点击时会发生什么:

> ajax发布请求和常规表单发布
> ajax成功 – >提交#order_item_product_id表单
>通过原始表格后回复重定向

我建议重新设计提交流程,通过常规表格或完全通过js提交.例如,您可以从表单中禁用post并将OrderItemsController #create更改为最终重定向(通过js)render:js => “window.location.href =’/ cart’;”

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读