2012-06-21 6 views
1

내가 만든 비디오 모델의 정보가 필요한 인터페이스에서 작업 중입니다. 즉, 필요한 정보를 얻으려면 MySQL 쿼리를 실행해야합니다. 내 코드 내 interface.js.erb 파일이 있습니다 :자바 스크립트 파일에서 Ruby/Rails 코드 사용하기

NoMethodError in Videos#show 

Showing /home/user/My Projects/Ruby Projects/Video_APP/app/views/layouts/application.html.erb where line #8 raised: 

undefined method `low_fps' for nil:NilClass 
    (in /home/user/My Projects/Ruby Projects/Video_APP/app/assets/javascripts/jQuery/interface.js.erb) 

Extracted source (around line #8): 

5: <%= stylesheet_link_tag "application", :media => "all" %> 
6: <%= javascript_include_tag "jQuery/jquery-1.7.2.min.js" %> 
7: <%= javascript_include_tag "jQuery/jquery-ui-1.8.21.custom.min.js" %> 
8: <%= javascript_include_tag "application.js" %> 
9: <%= javascript_include_tag "bootstrap-dropdown.js" %> 
10: <%= javascript_include_tag "jQuery/interface.js.erb" %> 
11: <%= javascript_include_tag "jQuery/events_controls.js" %> 

내가 정상적인 *의 .js이 파일을 사용한다 :

... 
    function play_vid() 
    { 
     low_fps = '<%= @video.low_fps %>' ; 
     alert(low_fps); //checking 
     if(low_vid.paused){ 
      low_vid.play(); 
      play_icon.classList.remove("icon-play-circle"); 
      play_icon.classList.add("icon-pause"); 
     }else{ 
      low_vid.pause(); 
      play_icon.classList.remove("icon-pause"); 
      play_icon.classList.add("icon-play-circle"); 
     } 

    } 
... 

위의 코드는이 날을 반환? 주요 차이점은 무엇이며 어떻게 문제를 해결할 수 있습니까?

편집 : (? 비디오/show.html.erb를)

# GET /videos/1 
    # GET /videos/1.json 
    def show 
    @video = Video.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @video } 
    end 
    end 
+0

을 당신에게 에러 메시지가 뜨면,'@ video' 변수는 정의되지 않은 메소드에서'low_fps'로 설정되지 않습니다. 컨트롤러에서'@ video'를 실제로 정의했는지 확인 했습니까? – Veger

+0

어떤 컨트롤러? 내 VideosController가 Rails에 의해 자동으로 생성되었습니다. –

+0

@TestTest 오류를 throw 할 때'interface.js.erb' 파일이 렌더링 될 때 컨트롤러가 요청을 처리하고 있습니다. –

답변

2

당신이보기에서

<div id="video" data-lowfps="<%= @video.low_fps %>"></div> 

다음을 수행하십시오 다음 JS 기능 변경 : 따르면

function play_vid() 
{ 
    low_fps = $('#video').data('lowfps'); 
    alert(low_fps); //checking 
    if(low_vid.paused){ 
     low_vid.play(); 
     play_icon.classList.remove("icon-play-circle"); 
     play_icon.classList.add("icon-pause"); 
    }else{ 
     low_vid.pause(); 
     play_icon.classList.remove("icon-pause"); 
     play_icon.classList.add("icon-play-circle"); 
    } 

} 
+0

그래, 나중에 시도해 보겠다.하지만 문제는 내가 어떻게 렌더링 할 수 있는지, @veger와 같은 컨트롤러를 사용하여 .js가 어떻게 렌더링되는지를 이해하려고한다는 것이다. 내 * .js 파일에는 함수 만 포함되어 있으므로 렌더링 할 내용을 이해하지 못합니다. * .js 함수에 레일스 변수를 전달하고 싶습니다. –

+0

루비 변수를 사용하려면 해당 액션으로 응답해야합니다. 즉, <% = @ video.id %>를 사용할 수 있습니다. videos/show.js.erb - (예를 들어) 투표 수와 같은 일부 값을 덮어 쓰십시오. $ .getScript ('/ videos/1') –

+0

show.html.erb 파일이 이미 있는데 show.js.erb도 추가해야하나요? –