2010-11-19 2 views
30

를 호출하지 않습니다 나는이 작동하지 않는 이유를 전혀 몰라, 나는 레일을 배우고 나는 그것을 이런 식으로 그것을 할라는 책을 다음 해요 :레일 form_for : 원격 => 사실은 JS 방법

<%= form_for([@article,@article.comments.new ], :remote=>true, :html => {:style=>'display: none;' }) do |f|%> 
    <div class="field"> 
     <%= f.label :name %> 
     <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
     <%= f.label :email %> 
     <%= f.text_field :email %> 
    </div> 
    <div class="field"> 
     <%= f.label :body %> 
     <%= f.text_area :body %> 
    </div> 
    <%= f.submit %> 
<% end %> 

그러나 작동하지 않습니다. 그리고 방화 광에서 요청을 확인하면 URL이 .js로 끝나지 않습니다. 이유가 있습니까?

+0

컨트롤러 메소드 (예 :index, create, new) 및 관련 뷰 파일을 볼 수 있으므로 전체 그림을 볼 수 있습니까? – Ingo

답변

-11

변경 :

[@article,@article.comments.new ] 

@article 

위해 나는 당신이 관련 섹션에있는 API를 읽고 제안 : http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

+2

ryudice 님이 ryudice의 기사에 대한 새로운 코멘트 형식을 찾고 있습니다. ryudice의 form_for 호출은 ryudice가 원하는 구문에 대한 올바른 구문입니다. 귀하의 제안은 표준 기사 양식에 적합 할 것입니다. 상황이 진술되지 않았기 때문에 혼란 스럽습니다. – natedavisolds

32

당신이 불을 지르고에서 만든 요청을 확인 단지 URL이 때문에 때 .js로 끝나지 않았다. 자바 스크립트에서 호출되지 않았다는 것을 의미하지는 않는다. Accept 매개 변수가 무엇인지 확인하려면 요청 헤더를 확인해야합니다. "application/javascript"라고 말하면 모두 좋습니다.

둘째, : remote => true를 시도하기 시작할 때 매우 일반적인 문제는 필요한 자바 스크립트 라이브러리가 코드에 포함되어 있지 않다는 것입니다. 그래서 내 생각 엔 다음과 같은 코드가 레이아웃에서 누락 된 것입니다 :

<%= javascript_include_tag :defaults %> 
<%= csrf_meta_tag %> 

그건 그냥 레이아웃의 <head> 태그 안에 그것을 포함, 경우라면.

+0

"html header"는 서식 파일의 head 태그가 폼/링크가 remote : true 인 것을 의미합니까? – Timo

+0

예, 지적 해 주셔서 감사합니다. 그렇게 명확하지 않았습니다. 하지만 그래, 내부에 포함되어야합니다 태그 – DanneManne

21

대부분의 경우, 프로토 타입 또는 jquery를 사용하는지 여부에 관계없이 rails.js 파일이 누락되었습니다.

jQuery를 사용하는 경우 필요한 파일을 모두 가져 오는 가장 쉬운 방법은 jquery-rails 보석을 사용하는 것입니다. 그러면 jquery와 필요한 rails.js를 설치하는 생성기가 추가됩니다. 당신의 레일 응용 프로그램 루트 내부와 같은

유형 뭔가 :

rails g jquery:install 

그리고, 당신의 application.html.erb

<%= javascript_include_tag :defaults %> 

또는 명시 적으로는 (별도로 jQuery를 포함하는 것을 잊지 마세요) 줄을 추가 내부 :

<%= javascript_include_tag :rails, :application %> 

[편집 : 저작물을 사용하는 Rails 3.1 이상 파이프 라인]

사용 (위에서 언급 한대로) jquery-rails 보석 및 (아직 존재하지 않은 경우) app/assets/javascripts/application.js에 다음 줄을 추가 :이 도움이

//= require jquery 
//= require jquery_ujs 

희망!

+0

그것은 좋은 일을 .. 감사합니다 .. – Neo

+0

우리는이 문제가 있었지만 그것을 해결하기 위해'jquery_ujs.js'를 포함 시켰습니다. –

+0

사실, 레일 3.1과 자산 파이프 라인이 조금 바뀌 었습니다. 나는 그것을 반영하기 위해 나의 대답을 업데이트했다. – nathanvda

4

컨트롤러를 확인하십시오. 응답 블록이 있습니까?그냥 종료 respond_to에서, 전체 블록을 꺼내, 그것을 가지고 않는 경우가 레일을 사용하여 응용 프로그램을 생성 한 경우

는 발판을 생성, 그것은

respond_to do |format| 
     format.html 
     format.xml { .... } 
    end 

뭔가를해야합니다; 또는 다른 한 줄

respond_to :html, :js 

또는 대안 중 하나가 당신의 경우에 작동합니다 여기

respond_to do |format| 
     format.html 
     format.js 
     format.xml { .... } 
    end 

같이 여분의 줄을 추가하여 블록을 편집하여 전체 블록을 교체합니다.

4

그것은 거기에 파일 아래에 포함되어야

당신의 /app/assets/javascript/application.js 파일을 확인하십시오. jquery_ujsremote=> true 기능을 담당합니다.

require `jquery` 
require `jquery_ujs` 

해피 코딩 !!

+1

'11.2 반복 F2 : AJAX 기반 장바구니 만들기 '에서'레일즈로 애자일 웹 개발'을하는 동안 비슷한 초보자 문제를 겪었습니다. 문제는 나열된 파일에서'= require jquery'의 주석을 제거하면 해결됩니다. 희망이 다른 사람들을 위해 도움이됩니다. –

+0

그건 훌륭한 @cppinitiator! –

6

이 오류는 jquery_ujs 파일을 추가하지 않은 경우 발생합니다. 방금 jquery 파일을 포함 시켰습니다.

그래서 당신은 당신이 보거나 application.js 또는 특정 레이아웃에 사용하는 다른 파일을 필요에 수동으로 두 파일을 추가해야합니다.

시나리오에 따라 1 차 또는 2 차 해결 방법을 수행 할 수 있습니다.

1 솔루션 :

<%= javascript_include_tag :jquery, :jquery_ujs %> 

2 솔루션 :

  1. JQuery와jquery_ujs응용 프로그램/자산 둘 필요가/

    를 application.js
    //= require jquery.js 
    
    //= require jquery_ujs 
    
  2. 파일에 application.js 파일을 포함하십시오.

    <%= javascript_include_tag :application %> 
    

참고 :

는 또한 두 솔루션에 대한 레이아웃 파일에 CSRF 태그를 추가 할 수 있습니다.

<%= csrf_meta_tag %> 

나는 아래에 Gemfile에 코드가 있으며이 Gem을 이미 설치했다고 생각합니다.

gem 'jquery-rails' 
+0

두 번째 해결책은 내 문제를 해결했습니다! –

관련 문제