ruby-on-rails – Rails购物车 – 不添加当前订单
Rails noob在这里.
我正在构建一个基本的购物车,它之前的工作非常好.没有改变任何代码(我git reset – 硬到我工作的上一次提交)它就破了. (?!?)这是细分: Github Repo:https://github.com/christinecha/michaka >创建产品. ? – 可能的问题 ! – 在创建订单商品时,新订单将继续创建=购物车始终为空. ! – 购物车未连接到正确的订单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发布请求和常规表单发布 我建议重新设计提交流程,通过常规表格或完全通过js提交.例如,您可以从表单中禁用post并将OrderItemsController #create更改为最终重定向(通过js)render:js => “window.location.href =’/ cart’;” (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |