当用户转到网页时,Rails会在会话中创建购物车

时间:2013-02-14 22:24:23

标签: ruby-on-rails ruby

我需要购物车,但为什么当我第一次去页面时,我没有看到@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

但是当页面打开时如何创建购物车对象....不是当我在页面上时,做了一件事......

2 个答案:

答案 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