我的路线档案:
Rails.application.routes.draw do
resources :line_items
resources :carts, param: :number
end
我的购物车型号:
class Cart < ApplicationRecord
def to_param
number
end
has_many :line_items, dependent: :destroy
end
我的LineItem模型
class LineItemsController < ApplicationController
before_action :set_cart, only: [:create]
def create
# stuff here ....
end
private
def set_cart
@cart = Cart.find(55)
rescue ActiveRecord::RecordNotFound
# @cart = Cart.create!
session[:cart_number] = @cart.number
end
end
我在before_action :set_cart
def set_cart
@cart = Cart.find_by!(number: session[:cart_number])
rescue ActiveRecord::RecordNotFound
@cart = Cart.create
session[:cart_number] = @cart.number
end
当我运行代码时,我收到了异常Couldn't find Cart
的错误,并且救援部分没有发现错误,我尝试使用一般异常rescue Exception
,但这并不是工作
更新
我发现错误来自我的购物车模型,我有这个:
before_create :generate_cart_number
MAX_RETRIES = 5
def generate_cart_number
update_column :number, SecureRandom.hex(16/4).upcase
rescue ActiveRecord::RecordNotUnique => e
@token_attempts = @token_attempts.to_i + 1
retry if @token_attempts < MAX_RETRIES
raise e, "Retries exhausted"
end
当我评论出这种方法时,set_cart
方法中的救援工作开始起作用,我不知道这里究竟是什么问题,但它正在发挥作用!感谢大家试图帮助
答案 0 :(得分:0)
我不知道你是否有设置购物车编号的方法,所以我建议改用ID。
def set_cart
@cart = Cart.find_by(id: session[:cart_id])
if @cart
#Do what you want to do if it exists
else
@cart = Cart.create
session[:cart_id]= @cart.id
end
end