2013-02-20 3 views
0

@cline에 속한 @line_items가 있습니다. 페이지를 새로 고치지 않고 장바구니를 비우고 싶습니다. 나는AJAX on Rails가 작동하지 않습니다.

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

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

작품 만 상쾌한 후 carts_controller

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의 방법을 파괴 카트 템플릿에 button_to을 설정합니다. 나는 버튼이 눌려 졌을 때, 카트가 비어 있다고 가정하기 때문에, 레일이 @cart를 렌더링 할 때 비어있는 것으로 보여야합니다. 어쩌면 뭔가 잘못 됐어?

+0

브라우저에서 개발자 툴바를 사용하여 AJAX op를 점검 했습니까? 해당 매개 변수가 OK인지, POST 작업인지, HTTP 코드 200을 반환하는지, XML (예 : XML)의 결과가 올바른지 확인하십시오. – halfer

+0

'format.html ...'줄 위에'format.js'를 추가해야합니다. – mccannf

+0

실제로 코드 내에서 format.js가 있습니다. 죄송합니다. line_items 컨트롤러를 통해 할 때 버전을 게시했습니다. –

답변

0

좋아, 추가, 내가 더 나은 생각 문제

1) 해결의 2 가지 방법을 발견 호출 메서드로 Cart.New 호출하기

0

destroy 액션이 호출 된 후 @cart 객체는 nil이 될 수 있습니다 (세션 [: cart_id]로 current_cart를 가져 오는 경우). JS 부분이 올바르게 렌더링 할 수 없도록합니다. 어쨌든 당신은 정말로 당신의 development.log를 점검하여 실제로 일어나고있는 것을 확인해야합니다. 의존 => : 모델에게

2) 방법을 cart.rb하는

has_many: line_items, :dependent => :destroy 

을 파괴

+0

이전 방법을 파괴 한 후에도 새로운 빈 카트가 생성되면 작동하는 것이 슬프지 만 좋은 해결책인지 궁금합니다. 나는 당신이 라이트라고 생각합니다. 그것을 파괴하는 것은 nill입니다 –

+0

장바구니에 대한 DB 항목을 삭제하고 다른 항목을 만드는 경우 카트를 비우기 (모든 line_item을 제거)하고 파괴하지 않기 때문에 해결책이별로 없습니다 – adrianrubio

+0

실제로 C art.new는 "new"와 "create"메소드의 차이로 인해 새로운 Cart를 생성하지 않습니다. 사용자에게는 중요하지 않다고 생각하지만, 나는 또한 그 솔루션을 좋다고 생각하지 않습니다. –

관련 문제