0

製品のインデックス ビューには、javascript 関数 addToCart を呼び出す「カートに追加」があります。

addToCart: function() {
  $.ajax({type:     'GET',
          url:  'store/add_to_cart/2',    // fixed id of product
      timeout:  5000,
      success:  function() { alert('Added !'); },
      error:    function() { alert('Error !'); }
  });
}



 def add_to_cart  // not working
    begin
      prod = Product.find(params[:id])
      @cart = find_cart
      @cart.add_product(prod)
      render :partial => 'cart', :object => @cart if request.xhr? 
    end
  end

この add_to_cart を使用すると、パーシャルがレンダリングされますが、このメソッドのデフォルト ビューもレンダリングされます - add_to_cart.html.haml - しかし、次のようにすると、パーシャルのみがレンダリングされます。なぜ違うのか誰か説明してもらえますか?

 def add_to_cart    // working fine
    begin
      prod = Product.find(params[:id])
      @cart = find_cart
      @cart.add_product(prod)
      if request.xhr?
        render :partial => 'cart', :object => @cart 
      else
        redirect_to_index    
      end
    end
  end

ご協力いただきありがとうございます !!

4

1 に答える 1

0

問題は、その行で、レンダー呼び出しのパラメーターがどこにあり、ステートメントがどこにあるのか、レールが混乱することです。のように行ってみてくださいrender(:partial => 'cart', :object => @cart) if request.xhr?

そして別のこと。パーシャルでローカル変数を使用している場合は、locals: {cart: @cart}代わりに使用することをお勧めします:object。または、慣例に従っていて、そのcart部分が含まれapp/view/carts/_cart.html*ている場合は、単に と言うことができますrender @cart

于 2013-09-15T06:26:51.483 に答える