# Render partial

**URL:** <https://www.ruby-forum.com/t/render-partial/137413>\
**Category:** IT\
**Created:** [May 12, 2008, 10:49pm UTC](https://www.ruby-forum.com/t/render-partial/137413 "2008-05-12T22:49:29Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![fosbury79](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/a87d85/32.png) [@fosbury79](https://www.ruby-forum.com/u/fosbury79)\
**Post date:** [May 12, 2008, 10:49pm UTC](https://www.ruby-forum.com/t/render-partial/137413/1 "2008-05-12T22:49:29Z")

</div>

Ciao,  
ho dei problemi con i render partial. Ho provato a scrivere un menu  
dinamico, in un partial. Il mio Ã¨ sicuramente un problema legato ad  
inesperienza.  
Le voci del menu caricano un elenco di funzionalitÃ associate, al tipo  
di utente che si Ã¨ loggato al sistema.  
Il punto di tutto Ã¨ che l’array che contiene le voci del menu, Ã¨  
istanziato nel metodo index del controller della pagina iniziale. Nel  
momento in cui cambio vista, i relativi metodi del del controller non  
contengono + l’array, per un problema di visibilitÃ delle variabili  
d’istanza, l’array risulta nullo.  
Come posso indicare all’interno del render partial \_menu.html.erb che  
deve caricare l’array da un certo controller ed una certa azione, senza  
dover riscrivere il codice in ogni metodo di ogni controller… violando  
in maniera il DRY?  
Sicuramente potrebbe essere che sto sbagliando ad usare il render  
partial, o non conosco il modo x fare quello che voglio. Comunque ogni  
suggerimento Ã¨ ben accetto.  
Grazie  
Vi allego uno stralcio del codice:  
------ application.rhtml ------------

#caricamento del partial ‘menu’

 \<%= render :partial =\> "layouts/menu" %\>

----- \_menu.html.erb ----------------  
\<% if logged\_in? %\>  
\<% for item in @vocimenu %\>  
\<%= item.name %\>  
\<% end %\>  
\<% end %\>

#dove @vocimenu viene caricato nel controller della home page della mia  
#applicazione. Non appena cambio vista, l’array @vocimenu Ã¨ nullo.

Tonino Tumolo

---

<div class="post-metadata">

**Author:** ![fosbury79](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/a87d85/32.png) [@fosbury79](https://www.ruby-forum.com/u/fosbury79)\
**Post date:** [May 13, 2008, 10:29am UTC](https://www.ruby-forum.com/t/render-partial/137413/2 "2008-05-13T10:29:10Z")

</div>

Ciao Tonio,

Il giorno 12/mag/08, alle ore 22:49, Tonino Tumolo ha scritto:

> Il punto di tutto è che l’array che contiene le voci del menu, è  
> istanziato nel metodo index del controller della pagina iniziale. Nel  
> momento in cui cambio vista, i relativi metodi del del controller non  
> contengono + l’array, per un problema di visibilità delle variabili  
> d’istanza, l’array risulta nullo.

Questo è perché il web e “stateless” - quindi il oggetto del  
controller che ha eseguito “index” è (o può essere) gettato via quando  
la azione “index” e finito (e allora è buttato via anche il tuo  
array). L’unico modo per tenere oggetti tra diverse azione è di  
mettergli nel hash della sessione.

Un altro modo per creare il tuo menu potrebbe essere un “before  
filter” - codice che è eseguito primo di ogni azione. Per avere un  
filter (o qualcos’altro) in tutti i controller, metterlo nel  
“application.rb” - questo file contiene la superclasse per tutti i  
controller nella tua applicazione.

Ciao,  
Daniel

> ## Grazie ----- \_menu.html.erb ---------------- Tonino Tumolo
> 
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).
> 
> * * *
> 
> Ml mailing list  
> removed\_email\_address@domain.invalid  
> [http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)

–  
Daniel H.  
Software Architect  
removed\_email\_address@domain.invalid

Net7  
Via Marche 8a - 56123 Pisa

> **[home - Net7](https://www.netseven.it/)**
>
> CreateDevelopAmplifyDesign, software ecomunicazione un unicoprocesso.Create/ Il Design Attraverso la conoscenza, la relazione, il confronto, individuiamo

---

<div class="post-metadata">

**Author:** ![fosbury79](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/a87d85/32.png) [@fosbury79](https://www.ruby-forum.com/u/fosbury79)\
**Post date:** [May 13, 2008, 12:09pm UTC](https://www.ruby-forum.com/t/render-partial/137413/3 "2008-05-13T12:09:48Z")

</div>

> L’unico modo per tenere oggetti tra diverse azione ï¿½ di  
> mettergli nel hash della sessione.

Ciao Daniel, ti ringrazio innanzitutto per la risposta.  
Inizialmente ci avevo pensato a questa soluzione, ma la vedevo troppo  
pesante e quindi avevo optato per l’idea di effettuare in ogni pagina  
(nel \_menu.html.erb) una verifica su una variabile di sessione che mi  
traccia se l’utente Ã¨ loggato o meno, e ad ogni refresh della pagina  
andare ad eseguire quel codice (contenuto in un controller), che mi  
ritornasse l’array delle voci da caricare per un certo utente.  
Il fatto cmq di portarsi nella sessione un hash-table di una ventina di  
items non potrebbe essere un po’ pesante?  
Quali potrebbero essere gli svantaggi?

Ciao  
Tonino Tumolo

---

<div class="post-metadata">

**Author:** ![fosbury79](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/a87d85/32.png) [@fosbury79](https://www.ruby-forum.com/u/fosbury79)\
**Post date:** [May 13, 2008, 1:19pm UTC](https://www.ruby-forum.com/t/render-partial/137413/4 "2008-05-13T13:19:43Z")

</div>

Ciao,

si, Ã¨ migliore di non tenere troppo nella sessione. (Ricordi anche che  
il default di Rails 2.0 salva le sessione in un cookie, limitando la  
larghezza a 4kb, e l’utente puÃ² vedere i contenuti del cookie). Quindi  
salva nella sessione solo i dati che non puoi raggiungere in nessun  
altro modo.

Per il tuo menu: Puoi salvare “login: si o no” nella sessione e  
mettere un before\_filter nel controllers/application.rb - il filter  
puÃ² creare il array nel controller prima di ogni azione. (Metti anche  
i accessors nel application.rb per il array, ovviamente 😉

Ciao,  
Daniel

Il giorno 13/mag/08, alle ore 12:09, Tonino Tumolo ha scritto:

> 

–  
Daniel H.  
Software Architect  
removed\_email\_address@domain.invalid

Net7  
Via Marche 8a - 56123 Pisa

> **[home - Net7](https://www.netseven.it/)**
>
> CreateDevelopAmplifyDesign, software ecomunicazione un unicoprocesso.Create/ Il Design Attraverso la conoscenza, la relazione, il confronto, individuiamo
