Cicli for nel controller, problema con le view

Ciao a tutti, una riunione ha più sessioni, una sessione ha più
relazioni, ogni relazione ha un solo relatore. Voglio avere la lista di
tutti i relatori con sotto a ciascuno le relazioni di cui è relatore
dentro quella sessione.
Se nel controller faccio un ciclo che mi riempie i due vettori @contacts
e @relations chiaramente ad ogni ripartenza del ciclo questi due vettori
vengono sovrascritti e nel view finale io vedo solo le informazioni
relative all’ultimo relatore. C’è un modo per far sì che prima di
ricominciare il ciclo i dati immagazzinati vengano passati comunque alla
view? Grazie mille, Giovanni Zangrillo.

No non c’è modo. Devi cambiare i cicli in modo da collezionare tutto
quello
che ti serve e mandarlo alla pagina in una botta sola.
Paolo

On 12/7/06, giovanno [email protected] wrote:


Paolo D.’
SeeSaw | Another point of view

[email protected]
personal http://paolodona.blogspot.com

Non so se ho capito bene cmq se tutti questi modelli sono in
relazione tra loro puoi puoi semplicemente fare (ad esempio)

@contacts = Contact.find(:all, :include => :relations)

Nella view ti fai un bel

render(:partial => “contact”, :collection => @contacts)

E nel partial (_contact.rhtml) fai

  • <%= h contact.name %> <% contact.relations.each do |relation| %>
  • <%= h relation.name %>
  • Il giorno 07/dic/06, alle ore 09:42, giovanno ha scritto:

    giovanno [email protected] writes:

    Se nel controller faccio un ciclo che mi riempie i due vettori @contacts
    e @relations chiaramente ad ogni ripartenza del ciclo questi due vettori
    vengono sovrascritti e nel view finale io vedo solo le informazioni
    relative all’ultimo relatore. C’è un modo per far sì che prima di
    ricominciare il ciclo i dati immagazzinati vengano passati comunque alla
    view? Grazie mille, Giovanni Zangrillo.

    Chiaramente puoi concatenare i risultati.

    @contacts, @relations = Array.new, Array.new

    meeting.sessions.each { |session|
    @relations += session.talks
    @contacts += session.talks.map { |talk| talk.author }
    }

    Un post molto recente parlava di eager loading che è una tecnica che
    ti permette di rendere più efficiente (i.e. fare meno query) tale
    recupero di informazioni.

    Se non ti è chiaro cosa fa lo snippet soprariportato puoi leggere il
    capitolo http://www.rubycentral.com/book/tut_containers.html

    Ciao

    giovanno wrote:

    Ciao a tutti, una riunione ha più sessioni, una sessione ha più
    relazioni, ogni relazione ha un solo relatore. Voglio avere la lista di
    tutti i relatori con sotto a ciascuno le relazioni di cui è relatore
    dentro quella sessione.
    Se nel controller faccio un ciclo che mi riempie i due vettori @contacts
    e @relations chiaramente ad ogni ripartenza del ciclo questi due vettori
    vengono sovrascritti e nel view finale io vedo solo le informazioni
    relative all’ultimo relatore. C’è un modo per far sì che prima di
    ricominciare il ciclo i dati immagazzinati vengano passati comunque alla
    view? Grazie mille, Giovanni Zangrillo.

    Grazie davvero a tutti, proverò a vedere cosa si può fare…mi rifarò
    vivo,Giovanni.