在Rails 5电子商务站点中,由于代码写得不好,传统购物车模型中的购物车没有被销毁,因此,现在heroku数据库中有超过10000行的空购物车。如果我从heroku控制台中销毁了它们,那么下一次已经来该站点但在购买过程中放弃的用户尝试访问该站点,将收到如下404错误消息:
ActiveRecord::RecordNotFound (Couldn't find Cart with 'id'=305)
因为饼干,显然。heroku数据库已超出其分配的存储容量,因此我需要销毁空车。(并修复代码,但这不是这里的问题)。有没有办法顺利进行此操作?
class CartsController < ApplicationController
def show
@cart = @current_cart
total = []
@cart.order_items.each do |item|
total << item.product.price_cents * item.quantity.to_i
end
@cart.amount_cents_cents = total.sum
end
def destroy
@cart = @current_cart
@cart.destroy
session[:cart_id] = nil
redirect_to root_path
end
end
class OrdersController < ApplicationController
before_action :authenticate_user!
def create
@order = Order.new
total = []
@current_cart.order_items.each do |item|
total << item.product.price_cents * item.quantity.to_i
end
@order.amount_cents_cents = total.sum
if @order.amount_cents_cents == 0
redirect_to root_path
else
@current_cart.order_items.each do |item|
@order.order_items << item
item.cart_id = nil
end
@user = current_user
@order.user_id = @user.id
@order.save
Cart.destroy(session[:cart_id])
session[:cart_id] = nil
redirect_to order_path(@order)
end
end
class ApplicationController < ActionController::Base
before_action :current_cart
def current_cart
if session[:cart_id]
cart = Cart.find(session[:cart_id])
if cart.present?
@current_cart = cart
else
session[:cart_id] = nil
end
end
if session[:cart_id] == nil
@current_cart = Cart.create
session[:cart_id] = @current_cart.id
end
end
find
如果找不到记录,则可以使用find_by_id
which返回而不是使用which引发异常nil
。如果nil
可以的话,您可以将购物车清空,并向用户显示您的购物车为空的消息。
另外,您可以使用抢救块从由 find
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句