在使用 jQuery + ERB 的视图中获取 6:Fixnum (Rails) 的未定义方法 'gsub'?



我正在尝试向特定视图添加一些jQuery+ERB:

views/posts/show.html.erb(文件顶部):

<% content_for :javascript do %>
  <script type="text/javascript">
    $(".post-<%=@post.id%> h3").prepend('<%=escape_javascript @post.votes.count %>');
  </script>
<% end %>
<h2>posts show</h2>
(etc...)
<div class="post-<%=@post.id%>">
  <h3>votes</h3><br />
  <%= link_to "Vote Up", vote_up_path(@post), :remote => true %><br />
</div>

views/layouts/application.html.erb(文件底部):

(etc...)
</div>
<%= yield %>
<%= yield :javascript %>
</body>
</html>

但我得到了以下错误:

undefined method `gsub' for 6:Fixnum
Extracted source (around line #3):
1: <% content_for :javascript do %>
2:   <script type="text/javascript">
3:     $("post-<%=@post.id%>").html('<%=escape_javascript @post.votes.count %>');
4:   </script>
5: <% end %>

有什么建议可以解决这个问题吗?

escape_javascript在您传递的任何内容上调用gsub,这对数字来说都没有意义。您可以不调用escape_javascript,也可以给它一个字符串:

$("post-<%=@post.id%>").html('<%=escape_javascript @post.votes.count.to_s %>');

由于@post.votes.count(可能)只是一个整数值,因此您可以使用to_json:

$(".post-<%= @post.id %> h3").prepend(<%= @post.votes.count.to_json %>);

请注意,您不需要将<%= %>表达式用引号括起来,因为to_json会在必要时为您这样做。

相关内容

最新更新