Periodically_call_remote

Ciao a tutti,
ho un piccolo problema con periodically_call_remote.
Vi spiego:

La vista passengers_list è così:

<%=periodically_call_remote(:url => {:action => “passengers_list”},
:frequency => ‘5’, :layout=>false)%>

div#passengers{float:left;width:33%;} div#passengers_onboard{float:left;width:33%;} div#passengers_embarking{float:left;width:33%;}
<%= render :partial => 'passengers_list'%>

invece la vista _passengers_list è così:

<%if @passengers.size != 0 then%>

Lista Passeggeri

    <% for passenger in @passengers%>
  • <%= passenger.surname%> <%= passenger.name%>
  • <%end%>

Passegeri imbarcati

    <% for passenger in @passengers_onboard%>
  • <%= passenger.surname%> <%= passenger.name%>
  • <%end%>

Passeggeri da imbarcare

    <% for passenger in @passengers_embarking%>
  • <%= passenger.surname%> <%= passenger.name%>
  • <%end%>
<%else%>

Non ci sono passeggeri per la tratta selezionata

<%end%>

Back

a questo punto nel controller ho definito il seguente metodo:

@passengers = Travel.find(
:all,
:conditions=>[“departure_id = ?”, params[:id]],
:joins=>“INNER JOIN passengers on passengers.id
= travels.passenger_id INNER JOIN departures on departures.id =
travels.departure_id”,
:select=>“passengers., travels.
)
@passengers_onboard = Travel.find(
:all,
:conditions=>[“departure_id = ? AND
status_board_id = 1”, params[:id]],
:joins=>“INNER JOIN passengers on passengers.id
= travels.passenger_id INNER JOIN departures on departures.id =
travels.departure_id”,
:select=>“passengers., travels.
)
@passengers_embarking = Travel.find(
:all,
:conditions=>[“departure_id = ? AND
status_board_id = 0”, params[:id]],
:joins=>“INNER JOIN passengers on passengers.id
= travels.passenger_id INNER JOIN departures on departures.id =
travels.departure_id”,
:select=>“passengers., travels.
)

costantemente controllo il valore dello stato del passeggero nel DB.
Il problema però è che la vista passengers_list nn viene aggiornata.

Qualcuno sa aiutarmi? Dove sbaglio?

Grazie a tutti,anticipatamente.

Devi specificare dove aggiornare la view.
prova con
<%=periodically_call_remote(:url => {:action => “passengers_list”},
:frequency => ‘5’, :layout=>false, :update => ‘passengers_list’ )%>

ciao e fammi sapere

On Tue, Jun 17, 2008 at 12:44 PM, Catiana T.
[email protected] wrote:

div#passengers_embarking{float:left;width:33%;}
<% for passenger in @passengers%>

Non ci sono passeggeri per la tratta selezionata

:joins=>"INNER JOIN passengers on passengers.id travels.departure_id", ) Ml mailing list [email protected] http://lists.ruby-it.org/mailman/listinfo/ml


Piero B.
Consulting
Software Developer - Database dept.
OgilvyOne worldwide, Milan
E-mail: [email protected]
E-mail: [email protected]
My Blog: cookedapple.net
Linux User #403396

Piero B. wrote:

Devi specificare dove aggiornare la view.
prova con
<%=periodically_call_remote(:url => {:action => “passengers_list”},
:frequency => ‘5’, :layout=>false, :update => ‘passengers_list’ )%>

ciao e fammi sapere

Grazie per aver risposto.

Ho provato ma succede che nel punto

<%= render :partial => 'passengers_list'%>

anzichè sostituire solo la vista _passengers_list, sostituisce tutta la
pagina passengers_list compresa di menù, header, footer ecc…

Spero di essere stata chiara.

anzichè sostituire solo la vista _passengers_list, sostituisce tutta la
pagina passengers_list compresa di menù, header, footer ecc…

Probabilmente nel metodo del controller non dici di non renderizzare il
layout
prova con

render :layout => false

mi sembra di capire che richiami la stessa view in due modi,
normalmente e via ajax, in tal caso usa

render(:layout => false) if request.xhr?

che non renderizza il layout nel caso la chiamata corrente sia una
chiamata ajax


Piero B.
Consulting
Software Developer - Database dept.
OgilvyOne worldwide, Milan
E-mail: [email protected]
E-mail: [email protected]
My Blog: cookedapple.net
Linux User #403396

Ma toglimi una curiosità; cosa vuole dire if request.xhr?

render(:layout => false) if request.xhr?

in ruby puoi mettere l’if alla fine di una espressione e puoi
compattare parecchio il codice

sarebbe come dire

if request.xml_http_request? == true
render(:layout => false)
end

che diventa, dato che xml_http_request? e xhr? sono alias

if request.xhr? == true
render(:layout => false)
end

poi

if request.xhr?
render(:layout => false)
end

e alla fine…
render(:layout => false) if request.xhr?

se invece non ti e’ chiaro cosa fa request.xhr?
request e’ l’oggetto che identifica la richiesta attuale fatta al
server, a questo oggetto puoi chiedere un po di tutto, ad esempio
l’indirizzo ip del client o se si tratta di una connessione
protetta…

xhr? e’ un alias di xml_http_request? che ti dice se la richiesta e’
stata effettuata attraverso ajax.
quindi nel tuo caso quando farai una richiesta ajax non verra’
renderizzato il layout


Piero B.
Consulting
Software Developer - Database dept.
OgilvyOne worldwide, Milan
E-mail: [email protected]
E-mail: [email protected]
My Blog: cookedapple.net
Linux User #403396

Piero B. wrote:

anzich� sostituire solo la vista _passengers_list, sostituisce tutta la
pagina passengers_list compresa di men�, header, footer ecc…

Probabilmente nel metodo del controller non dici di non renderizzare il
layout
prova con

render :layout => false

mi sembra di capire che richiami la stessa view in due modi,
normalmente e via ajax, in tal caso usa

render(:layout => false) if request.xhr?

che non renderizza il layout nel caso la chiamata corrente sia una
chiamata ajax

Grazie, grazie mille.
sembra funzionare…

Ma toglimi una curiosità ; cosa vuole dire if request.xhr?

Grazie tante ancora.

Ciao
Catiana

render(:layout => false) if request.xhr?

se invece non ti e’ chiaro cosa fa request.xhr?
request e’ l’oggetto che identifica la richiesta attuale fatta al
server, a questo oggetto puoi chiedere un po di tutto, ad esempio
l’indirizzo ip del client o se si tratta di una connessione
protetta…

xhr? e’ un alias di xml_http_request? che ti dice se la richiesta e’
stata effettuata attraverso ajax.
quindi nel tuo caso quando farai una richiesta ajax non verra’
renderizzato il layout

Grazie mille sei stato chiarissimo e soprattutto gentilissimo.

Ciao e grazie ancora

Catiana