0

だから私は@cartに属する@line_itemsを持っています。ページを更新せずにカートを空にしたい。カートテンプレートにbutton_toを設定しました

<%= button_to 'Empty cart' , cart, :remote => true, :method => :delete,
:confirm => 'Are you sure?' %>

carts_controllerのdestroyメソッド

def destroy
  @cart = current_cart
  @cart.line_items.destroy
  session[:cart_id] = nil
  respond_to do |format|
    format.html { redirect_to(store_url, :notice => 'Your cart is currently empty' ) }
    format.js
    format.xml { head :ok }
  end
end

およびdestroy.js.erb

$('#cart').html("<%= escape_javascript(render(@cart)) %>");

リフレッシュ後にのみ機能します。ボタンを押すとカートが空になると思いますので、レールが@cartをレンダリングすると、カートは空で表示されます。多分私は何かが間違っていますか?

4

2 に答える 2

0

destroy アクションが呼び出された後、@cart オブジェクトはおそらく nil (session[:cart_id] で current_cart を取得している場合) になるため、JS パーシャルはそれを正しくレンダリングできません。とにかく、development.log を実際にチェックして、実際に何が起こっているかを確認する必要があります。

于 2013-02-21T02:50:52.437 に答える
0

わかりました、問題を解決する 2 つの方法を見つけました

1) :dependent => :destroy を追加して、どちらが良いと思いますか

has_many: line_items, :dependent => :destroy

cart.rb モデルへ

2) destroy メソッドで Cart.new を呼び出す方法

于 2013-02-22T22:27:50.763 に答える