2012-02-06 5 views
5

Próbuję dodać jQuery + ERB do konkretnego widzenia:Uzyskiwanie niezdefiniowanej metody `gsub 'dla 6: Fixnum (Rails) w widoku z jQuery + ERB?

views/postów/show.html.erb (początku pliku):

<% content_for :javascript do %> 
    <script type="text/javascript"> 
    $(".post-<%[email protected]%> h3").prepend('<%=escape_javascript @post.votes.count %>'); 
    </script> 
<% end %> 

<h2>posts show</h2> 

(etc...) 

<div class="post-<%[email protected]%>"> 
    <h3>votes</h3><br /> 
    <%= link_to "Vote Up", vote_up_path(@post), :remote => true %><br /> 
</div> 

odsłon/układy /application.html.erb (na dole pliku):

(etc...) 

</div> 

<%= yield %> 

<%= yield :javascript %> 
</body> 

</html> 

Ale ja otrzymuję następujący błąd:

undefined method `gsub' for 6:Fixnum 
Extracted source (around line #3): 

1: <% content_for :javascript do %> 
2: <script type="text/javascript"> 
3:  $("post-<%[email protected]%>").html('<%=escape_javascript @post.votes.count %>'); 
4: </script> 
5: <% end %> 

Wszelkie sugestie, aby rozwiązać ten problem?

Odpowiedz

14

dzwoni pod numer gsub, niezależnie od tego, co przekazałeś, co nie ma sensu dla numeru. Można albo nie nazywają escape_javascript lub nadać mu ciąg Zamiast:

$("post-<%[email protected]%>").html('<%=escape_javascript @post.votes.count.to_s %>'); 
3

Od @post.votes.count jest (prawdopodobnie) po prostu liczbą całkowitą, można po prostu użyć to_json:

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

Zauważ, że nie możesz należy zawrzeć wyrażenie <%= %> w cudzysłowie, ponieważ to_json zrobi to za Ciebie, gdy będzie to konieczne.

Powiązane problemy