2012-04-13 2 views
9

책에서 권장하는대로 내가 레일 4 판와 책 실용적인 애자일 웹 개발을 다음 해요,하지만 내가 레일 3.2.2 대신 3.0.5을 사용하고 있습니다 :레일 3.2.2 실행하지 RJS

~$ ruby -v 
ruby 1.9.3p125 (2012-02-16) [i686-linux] 
~$ rails -v 
Rails 3.2.2 

AJAX를 포함하여 페이지를 다시로드하지 않고 장바구니를 다시 그릴 때 막혔습니다. 여기 line_items_controller.rb에서 만드는 작업입니다 :

def create 
    @cart = current_cart 
    product = Product.find(params[:product_id]) 
    @line_item = @cart.add_product(product.id) 

    respond_to do |format| 
     if @line_item.save 
     format.html { redirect_to(store_url) } 
     format.js 
     format.json { render json: @line_item, status: :created, location: @line_item } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @line_item.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

는 그리고 여기 (응용 프로그램/뷰/line_items에서) 내 RJS 파일 create.js.rjs 그러나

page.alert('NO PROBLEM HERE') 
page.replace_html('cart', render(@cart)) 

, 난을 클릭 이 작업 시작 버튼 :

<%= button_to 'Add to Cart', line_items_path(:product_id => product), :remote => true %> 

를 I 개발 로그에 다음과 같은 오류 얻을 :

ActionView::MissingTemplate (Missing template line_items/create, application/create with {:locale=>[:en], :formats=>[:js, :html], :handlers=>[:erb, :builder, :coffee]}. Searched in: 
    * "/home/me/src_rails/depot/app/views" 
): 
    app/controllers/line_items_controller.rb:47:in `create' 
에게

Rendered line_items/create.js.erb (0.4ms) 

을하지만 아무것도조차 경고 ....보기에서 발생하지 :

내가 create.js.erb하는 create.js.rjs의 파일 이름을 변경하는 경우 6,이 문제가 수정됩니다. 내가 무엇이 누락 되었습니까? file.js.erb와 file.js.rjs의 차이점은 무엇입니까?

+0

안녕하세요! Google에 귀하의 게시물을 찾았습니다. 나는 똑같은 상황에 직면했다. 해결책을 찾았습니까? – code4j

+0

나는 문제를 해결했다 !!! 내 [솔루션] (http://stackoverflow.com/questions/12220816/the-ajax-request-cannot-see-the-effect-without-refresh-the-browser-in-rails/12224196#12224196)을 참조하십시오. 이게 당신을 도울 수 있기를 바랍니다. – code4j

답변

18

레일 3.1에서 rjsremoved as the default 인 것처럼 보입니다. prototype-rails 보석을 설치하면 다시 얻을 수 있지만 새로운 기본값 인 jQuery를 사용해야한다고 생각합니다.

코드의 경우 작동하지 않는 이유는 rjs 템플릿이 .js.erb으로 해석되어 유효하지 않은 JavaScript를 생성하기 때문일 수 있습니다 (브라우저의 JavaScript 콘솔에 오류가 표시되어야 함). rjs 템플릿을 사용하여 page 변수를 설정하고이를 사용하여 Ruby 코드를 작성하여 페이지를 조작 할 수 있습니다. .js.erb 템플릿에서는 .html.erb 개의보기에서 더 잘 작동합니다. <% %> 태그를 사용하여 Ruby가 임베드 된 실제 자바 스크립트를 작성합니다. 따라서 create.js.erb의 코드는 다음과 같아야합니다.

alert('NO PROBLEM HERE'); 
$('#cart').html("<%= escape_javascript(render(@cart)) %>"); 
+0

고마워, 나는 확실히 jquery로 전환하고있다. –

6

레일이 3.1 이상인 경우 더 이상 jquery-rjs가 없습니다. line_items/create.js.coffee :

alert 'NO PROBLEM HERE' 
$('#cart').html '<%= j render(@cart) %>' 

또는 그런 일하지만 당신은 여기 커피 스크립트를 사용할 수 있습니다.

관련 문제