0

仅当变量确实存在(变量的名称是@filter)时,我才尝试做某事,问题是我似乎无法弄清楚如何让代码工作。我不断得到

undefined method `male_filter' for nil:NilClass

即使第一个 if 应该做的伎俩。这是javascript的实际代码:

$(document).ready(function(){
    if(typeof <%=@filter%>!='undefined'){
        if(typeof <%=@filter.male_filter%>!='undefined'){
            if(<%=@filter.male_filter%>=='18'){
                $('#18M').addClass('active');
            }
            else if(<%=@filter.male_filter%>=='21'){
                $('#21M').addClass('active');
            }
            else if(<%=@filter.male_filter%>=='24'){
                $('#24M').addClass('active');
            }
        }
    }
}

我还尝试在名为 filterExists 的控制器中添加一个布尔值,并执行以下操作:

    var filterExists=<%=@filterExists%>;
    if(filterExists==true){...}

但我仍然遇到同样的错误:

undefined method `male_filter' for nil:NilClass
4

2 回答 2

2

问题是所有 ERB 都在服务器上进行解释,然后将 JavaScript 提供给运行它的客户端,您正在尝试混合服务器端和客户端逻辑。

只要您了解 ERB 是首先被解释的,那么您就可以像这样构造您的代码:

$(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 %>
});
于 2013-05-31T17:53:02.173 回答
1

我假设这是一个 js.erb。您也可以在其中使用常规 Ruby:

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

等等。

于 2013-05-31T17:44:06.367 回答