# Il respond\_to

**URL:** <https://www.ruby-forum.com/t/il-respond-to/195796>\
**Category:** IT\
**Created:** [September 30, 2010, 10:10am UTC](https://www.ruby-forum.com/t/il-respond-to/195796 "2010-09-30T10:10:54Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [September 30, 2010, 10:10am UTC](https://www.ruby-forum.com/t/il-respond-to/195796/1 "2010-09-30T10:10:54Z")

</div>

Non vincola il tipo di risposta?  
Mi spiego meglio: se in una action ho

respond\_to do |format|  
if @delivery.save  
format.html { redirect\_to([@ruser, @delivery], :notice =\>  
‘Delivery was successfully created.’) }  
format.xml { render :xml =\> @delivery, :status =\> :created,  
:location =\> @delivery }  
else  
format.html { render :action =\> “new” }  
format.xml { render :xml =\> @delivery.errors, :status =\>  
:unprocessable\_entity }  
end  
end

mi aspetto che il tipo di risposta sia limitato a html e xml e non js.  
Eppure se la action viene invocata tramite richiesta ajax quindi \<%=  
form…: remote =\> true %\>  
viene invocata la action show come in format.html {  
redirect\_to([@ruser, @delivery] ma viene cercato il template  
show.js.erb.  
Ma se nel respond\_to la risposta tipo js non e’ indicata com’e’ che  
viene cercato il template js?

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [September 30, 2010, 10:44am UTC](https://www.ruby-forum.com/t/il-respond-to/195796/2 "2010-09-30T10:44:16Z")

</div>

2010/9/30 Mauro [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> ```
> format.html { render :action => "new" }
> 
> ```
> 
> show.js.erb.  
> Ma se nel respond\_to la risposta tipo js non e’ indicata com’e’ che  
> viene cercato il template js?

No, non la vincola. Cosi’ come se non specifichi un comportamento per  
il format html il default e’ quello di cercare azione.html.erb, cosi’  
se non lo specifichi per il format js (che e’ quello associato alla  
:remote che passi nella form) il default e’ cercare azione.js.erb

In pratica, se vuoi semplicemente fare la redirect basta che togli la  
remote, mentre se vuoi fare qualche altra cosa o usi il template  
.js.erb che ti viene richiesto o un rjs inline (quello “do |page|”).

Ciao

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [January 3, 2011, 9:43pm UTC](https://www.ruby-forum.com/t/il-respond-to/195796/3 "2011-01-03T21:43:26Z")

</div>

2010/9/30 Luca De Marinis [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> > else  
> > redirect\_to([@ruser, @delivery] ma viene cercato il template  
> > remote, mentre se vuoi fare qualche altra cosa o usi il template  
> > .js.erb che ti viene richiesto o un rjs inline (quello “do |page|”).

Scusate se riprendo questo vecchio thread ma ancora mi sfugge qualcosa.  
In due applicazioni diverse uso del codice javascript.  
Nella prima:

$(function() {  
$(“#sector\_select”).change(function() {  
$.post(‘/albo/filter\_category’, {sector\_id:  
$(‘#sector\_select’).val()}, function(data) {  
$(“#category\_update”).html(data);  
});  
});

Qui al change viene eseguita l’action filter\_category e viene  
restituita la pagina filter\_category.html.erb.  
Nella seconda applicazione uso:

$(function() {  
$(“#nameSearch”).bind(‘input’,function() {  
$(‘#spinner’).show();  
$.get(‘/rusers’, {fullname: $(‘#nameSearch’).val()},  
function(data) {  
$(‘#spinner’).hide();  
$(“#results”).html(data);  
});  
});  
});

Qui chiamo l’action index ma mi dice che manca il template index.js.erb.  
Perche’ nella prima mi restituisce la pagina .html.erb mentre il  
secondo codice mi chiede la .js.erb?

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [January 3, 2011, 9:52pm UTC](https://www.ruby-forum.com/t/il-respond-to/195796/4 "2011-01-03T21:52:51Z")

</div>

2011/1/3 Mauro [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> > > :location =\> @delivery }  
> > > viene invocata la action show come in format.html {  
> > > In pratica, se vuoi semplicemente fare la redirect basta che togli la  
> > > $(‘#sector\_select’).val()}, function(data) {  
> > > $(‘#spinner’).show();  
> > > $.get(‘/rusers’, {fullname: $(‘#nameSearch’).val()}, function(data) {  
> > > $(‘#spinner’).hide();  
> > > $(“#results”).html(data);  
> > > });  
> > > });  
> > > });
> 
> Qui chiamo l’action index ma mi dice che manca il template index.js.erb.  
> Perche’ nella prima mi restituisce la pagina .html.erb mentre il  
> secondo codice mi chiede la .js.erb?

Scusate ho sbagliato a postare il secondo codice, in effetti anche il  
secondo mi restituisce la pagina .html.erb il seguente invece mi  
chiede la .js.erb:

$(function () {  
$(‘.pagination a’).live(‘click’, function () {  
$.getScript(this.href);  
return false;  
}  
);  
});

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [January 6, 2011, 12:12am UTC](https://www.ruby-forum.com/t/il-respond-to/195796/5 "2011-01-06T00:12:22Z")

</div>

credo sia semplicemente perchè al primo specifichi che si tratta di una  
chiamata get e non post mentre al secondo no.
