Il respond_to

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?

2010/9/30 Mauro [email protected]:

   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

2010/9/30 Luca De Marinis [email protected]:

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?

2011/1/3 Mauro [email protected]:

: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;
}
);
});

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