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 に答える