[英]Rails Shopping Cart - not adding to current order
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设置会话,因此在收到重定向时它是不完整的。
我认为点击时会发生什么:
我建议重新设计提交流程,通过常规表格或完全通过js提交。 例如,您可以从表单中禁用post并将OrderItemsController #create更改为最终重定向(通过js) render :js => "window.location.href = '/cart';"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.