2012-02-06 16 views
5

estoy tratando de añadir un poco de jQuery + ERB a una vista específica:Obteniendo el método indefinido `gsub 'para 6: Fixnum (Rails) en una vista con jQuery + ERB?

vistas/mensajes/show.html.erb (parte superior del archivo):

<% 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> 

views/layouts /application.html.erb (final del archivo):

(etc...) 

</div> 

<%= yield %> 

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

</html> 

Pero estoy consiguiendo el error siguiente:

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 %> 

¿Alguna sugerencia para solucionar este problema?

Respuesta

14

escape_javascript llama al gsub en lo que pase, lo cual no tiene sentido para un número. Puede o no llamar escape_javascript o darle una cadena en lugar:

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

Desde @post.votes.count es (presumiblemente) simplemente un valor entero, sólo se puede utilizar to_json:

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

en cuenta que no lo hace debe envolver la expresión <%= %> entre comillas, ya que to_json lo hará por usted cuando sea necesario.

Cuestiones relacionadas