2012-06-21 3 views
1

Я работаю в интерфейсе, которому нужна информация из созданной видеомодели. Это означает, что мне нужно будет выполнить запрос MySQL, чтобы получить нужную мне информацию. Мой код это, в моем interface.js.erb файле:Использование кода Ruby/Rails в файле Javascript

... 
    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"); 
     } 

    } 
... 

Приведенный выше код возвращает меня это:

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? каковы основные отличия и как я могу исправить свою проблему?

EDIT: (? Видео/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

какой контроллер? мой VideoController был сгенерирован автоматически Rails –

+0

@TestTest Независимо от того, какой контроллер обрабатывает запрос, когда файл '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

Да, я попробую это позже, но дело в том, что я пытаюсь понять, как вы можете визуализировать * .js, используя контроллер, например, @veger. my * .js файл содержит только функцию, поэтому я не понимаю, что нужно сделать. Я просто хочу передать переменную rails в функцию * .js –

+0

Чтобы использовать такие рубиновые переменные, вам нужно ответить таким действием - вы можете использовать <% = @ video.id%> в ie. video/show.js.erb - чтобы (например) перезаписать некоторые значения, например, количество голосов. show.js.erb будет отображаться после того, как вы сделаете запрос ajax: $ .getScript ('/ videos/1') –

+0

У меня уже есть файл show.html.erb, должен ли я также добавить show.js.erb? –

Смежные вопросы