我需要购物车,但为什么当我第一次去页面时,我没有看到@cart对象,但如果刷新,一切都还可以。如果简单说:购物车不是在第一页加载时创建的,而是在第二页上创建,这很糟糕....怎么办,当我在页面的浏览器网址中打开时,我会看到购物车对象?
我的代码:(app_controller)
before_filter :current_cart
private
def current_cart
Cart.find(session[:cart_id])
@cart = Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound
cart = Cart.create
session[:cart_id] = cart.id
cart
end
并查看:
%li
= link_to "Перейти в корзину", @cart
但是当页面打开时如何创建购物车对象....不是当我在页面上时,做了一件事......
答案 0 :(得分:1)
简单地说 - 在救援区(当购物车尚未在数据库中时)时,您需要将新创建的购物车分配给实例变量@cart
,而不是本地变量cart
。
before_filter :current_cart
private
def current_cart
@cart = Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound
@cart = Cart.create
session[:cart_id] = @cart.id
@cart
end
答案 1 :(得分:1)
试试这个:
before_filter :current_cart
private
def current_cart
@cart = Cart.where(id: session[:cart_id]).first #this will return nil if the Cart with id session[:cart_id] does not exist
@cart = Cart.create if @cart.nil?
session[:cart_id] = @cart.id
@cart
end