我正在尝试向特定视图添加一些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
会在必要时为您这样做。