# \[Rails\] i file js.erb visualizzano il codice invece di eseguirlo

**URL:** <https://www.ruby-forum.com/t/rails-i-file-js-erb-visualizzano-il-codice-invece-di-eseguirlo/213229>\
**Category:** IT\
**Created:** [October 26, 2011, 11:19pm UTC](https://www.ruby-forum.com/t/rails-i-file-js-erb-visualizzano-il-codice-invece-di-eseguirlo/213229 "2011-10-26T23:19:06Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![luislavena](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/0ea827/32.png) [@luislavena](https://www.ruby-forum.com/u/luislavena)\
**Post date:** [October 26, 2011, 11:19pm UTC](https://www.ruby-forum.com/t/rails-i-file-js-erb-visualizzano-il-codice-invece-di-eseguirlo/213229/1 "2011-10-26T23:19:06Z")

</div>

Ciao a tutti,  
Approfitto della vostra pazienza per sottoporvi un problemino che ho con  
Rails 3.0.9 + jQuery

In sostanza non riesco a far funzionare i file jr.erb  
Sto utilizzando AJAX per inviare un modulo e quando ottengo degli errori  
compongo un Builder::XmlMarkup per passarlo al file js.erb

```
    format.js {
      xm = Builder::XmlMarkup.new

       @pay_check.errors.full_messages.each do |msg|
        xm.span {
                 xm << msg
                 xm.br
        }
       end
       @str = xm.target!
    }

```

Il file jr.erb contiene il codice JS per visualizzarlo nel div degli  
errori:

$(’#error\_explanation’).html(’\<%= @str %\>’);

Nel div però ottengo la visualizzazione del codice, non l’esecuzione,  
ottengo cioè:

$(’#error\_explanation’).html('Errore … ');

---

<div class="post-metadata">

**Author:** ![nimbuz77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/3be4f8/32.png) [@nimbuz77](https://www.ruby-forum.com/u/nimbuz77)\
**Post date:** [October 27, 2011, 12:02am UTC](https://www.ruby-forum.com/t/rails-i-file-js-erb-visualizzano-il-codice-invece-di-eseguirlo/213229/2 "2011-10-27T00:02:40Z")

</div>

Il 26 ottobre 2011 23:19, Nimbuzz 77 [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

> Ciao a tutti,  
> In sostanza non riesco a far funzionare i file jr.erb

Dove si trovano questi file erb?

> $(‘#error\_explanation’).html(‘\<%= @str %\>’);

Ti sconsiglio questo approccio. meglio non mischiare ruby e  
javascript; conviene piuttosto scrivere javascript puro, e inserire  
nel DOM i dati che vuoi passare al codice javascript, come attributi.  
Se questo non fosse possibile, puoi sempre emettere un tag script  
contenente un’unica invocazione di un metodo javascript.

Cerca “Unobtrusive Javascript”, troverai moltissimi esempi.

pietro

---

<div class="post-metadata">

**Author:** ![nimbuz77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/3be4f8/32.png) [@nimbuz77](https://www.ruby-forum.com/u/nimbuz77)\
**Post date:** [October 27, 2011, 4:17pm UTC](https://www.ruby-forum.com/t/rails-i-file-js-erb-visualizzano-il-codice-invece-di-eseguirlo/213229/3 "2011-10-27T16:17:24Z")

</div>

Hai provato a fare l’escape?  
$(’#error\_explanation’).html("\<%= escape\_javascript(@str)%\>")

---

<div class="post-metadata">

**Author:** ![nimbuz77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/3be4f8/32.png) [@nimbuz77](https://www.ruby-forum.com/u/nimbuz77)\
**Post date:** [October 27, 2011, 9:52am UTC](https://www.ruby-forum.com/t/rails-i-file-js-erb-visualizzano-il-codice-invece-di-eseguirlo/213229/4 "2011-10-27T09:52:44Z")

</div>

> Dove si trovano questi file erb?

Il file js.erb si trova nella dir delle view insieme ai file html.erb

> > $(‘#error\_explanation’).html(‘\<%= @str %\>’);
> 
> Ti sconsiglio questo approccio. meglio non mischiare ruby e  
> javascript; conviene piuttosto scrivere javascript puro, e inserire  
> nel DOM i dati che vuoi passare al codice javascript, come attributi.  
> Se questo non fosse possibile, puoi sempre emettere un tag script  
> contenente un’unica invocazione di un metodo javascript.
> 
> Cerca “Unobtrusive Javascript”, troverai moltissimi esempi.

In quel modo sono riuscito ad implementarlo ma volevo provare a  
utilizzare questo approccio cioè a “mescolare” javascript e ruby (mi  
sembra molto potente).

Ho utilizzato il render(:text =\> @str) e in un file javascript ho fatto  
l’hook dell’ajax:success.

---

<div class="post-metadata">

**Author:** ![nimbuz77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/3be4f8/32.png) [@nimbuz77](https://www.ruby-forum.com/u/nimbuz77)\
**Post date:** [November 10, 2011, 3:43pm UTC](https://www.ruby-forum.com/t/rails-i-file-js-erb-visualizzano-il-codice-invece-di-eseguirlo/213229/5 "2011-11-10T15:43:51Z")

</div>

Nel’ultima versione di Rails (3.1.1) l’helper escape\_javascript () è  
diventato j()  
quindi il nuovo codice sarà:

$(’#error\_explanation’).html("\<%=j(@str)%\>")

---

<div class="post-metadata">

**Author:** ![nimbuz77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/3be4f8/32.png) [@nimbuz77](https://www.ruby-forum.com/u/nimbuz77)\
**Post date:** [October 28, 2011, 11:57am UTC](https://www.ruby-forum.com/t/rails-i-file-js-erb-visualizzano-il-codice-invece-di-eseguirlo/213229/6 "2011-10-28T11:57:55Z")

</div>

Stavo giusto rispondendo che bisognautilizzare la funzione  
escape\_javascript()

Grazie.

---

<div class="post-metadata">

**Author:** ![nimbuz77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/3be4f8/32.png) [@nimbuz77](https://www.ruby-forum.com/u/nimbuz77)\
**Post date:** [November 10, 2011, 6:21pm UTC](https://www.ruby-forum.com/t/rails-i-file-js-erb-visualizzano-il-codice-invece-di-eseguirlo/213229/7 "2011-11-10T18:21:32Z")

</div>

j() è un alias di escape\_javascript() che rimane disponibile  
Ciao
