0

カートを購入する必要がありますが、最初にページに移動したときに@cartオブジェクトが表示されなかったのはなぜですか。ただし、更新すれば、すべて問題ありません。簡単に言うと、カートは最初のページの読み込みではなく、2番目のページの読み込み時に作成されますが、これは悪いことです。ページのブラウザURLで開くと、カートオブジェクトがすぐに表示されます。

私のコード:(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

しかし、ページが開いているときにカートオブジェクトを作成する方法....私がページにいるときではなく、何かをしました....

4

2 に答える 2

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
于 2013-02-14T22:27:07.773 に答える
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
于 2013-02-14T22:28:36.913 に答える