2013-05-31 38 views
0

我試圖做一些事情,如果存在一個變量(變量的名稱是@filter),問題是我似乎無法弄清楚如何讓代碼工作。我不斷收到在JavaScript中未定義的紅寶石對象

undefined method `male_filter' for nil:NilClass 

即使第一次如果應該做的伎倆。 這裏的JavaScript的實際代碼:

$(document).ready(function(){ 
    if(typeof <%[email protected]%>!='undefined'){ 
     if(typeof <%[email protected]_filter%>!='undefined'){ 
      if(<%[email protected]_filter%>=='18'){ 
       $('#18M').addClass('active'); 
      } 
      else if(<%[email protected]_filter%>=='21'){ 
       $('#21M').addClass('active'); 
      } 
      else if(<%[email protected]_filter%>=='24'){ 
       $('#24M').addClass('active'); 
      } 
     } 
    } 
} 

我也嘗試添加名爲filterExists控制器一個布爾值,並做了以下內容:

var filterExists=<%[email protected]%>; 
    if(filterExists==true){...} 

但我仍然得到了同樣的錯誤:

undefined method `male_filter' for nil:NilClass 
+0

查看生成的頁面的源代碼!我認爲你的服務器端代碼並​​不像你認爲的那樣工作。查看服務器端代碼不會有幫助。 – epascarello

回答

2

的問題是所有的僱員再培訓局的解釋在服務器上,然後將JavaScript是提供給在那裏運行客戶端,你正試圖混合服務器端和客戶端邏輯。

只要你理解了再培訓局首先解釋,那麼你可以組織你的代碼是這樣的:

$(document).ready(function(){ 
    <% if @filter.present? %> 
    <% if @filter.male_filter == '18' %> 
     $('#18M').addClass('active'); 
    <% end %> 
    <% if @filter.male_filter == '21' %> 
     $('#21M').addClass('active'); 
    <% end %> 
    <% if @filter.male_filter == '24' %> 
     $('#24M').addClass('active'); 
    <% end %> 
    <% end %> 
}); 

或者更簡潔:

$(document).ready(function(){ 
    <% if @filter %> 
    $('#<%= @filter.male_filter %>M').addClass('active'); 
    <% end %> 
}); 
+0

感謝您的解釋,真的很感激。 – Waclock

1

我認爲這是一個js.erb。你可以在那些使用普通的Ruby,以及:

<% if @filter.present? %> 
    <% if @filter.male_filter == "18" %> 
    $('#18').addClass('active'); 
    <% end> 
<% end %> 

等等

+0

對不起,我忘了提,這是一個視圖 - > html.erb。 – Waclock