# Consiglio: dati attraverso i controller

**URL:** <https://www.ruby-forum.com/t/consiglio-dati-attraverso-i-controller/123624>\
**Category:** IT\
**Created:** [December 19, 2007, 9:56am UTC](https://www.ruby-forum.com/t/consiglio-dati-attraverso-i-controller/123624 "2007-12-19T09:56:22Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![enzo\_ferro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/977dab/32.png) [@enzo\_ferro](https://www.ruby-forum.com/u/enzo_ferro)\
**Post date:** [December 19, 2007, 9:56am UTC](https://www.ruby-forum.com/t/consiglio-dati-attraverso-i-controller/123624/1 "2007-12-19T09:56:22Z")

</div>

Ciao a tutti,  
scusate il Subject un pÃ² incompresibile ma non sapevo come spiegarmi.  
Avrei bisogno di un consiglio.  
Nella mia applicazione ROR al momento del login, che Ã¨ sempre la prima  
pagina che viene visualizzata, avrei la necessitÃ di leggere da un  
documento XML alcune informazioni che poi dovrei riutilizzare in tutti  
gli altri controller.  
Ho letto un pÃ² di cose sulla sessione, ma prima di avventurarmi in  
“luoghi oscuri” volevo un vostro consiglio.  
I dati che devo leggere dal file XML sono una serie di “id” con i  
relativi “title” (che sono i nomi delle sezioni dell’applicazione).  
La mia domanda Ã¨: mi conviene mettere nella sessione queste informazioni  
per averle disponibili in tutti i controller, oppure ci sono altri modi  
piÃ¹ consoni?

A voi le risposte,  
grazie mille e buona giornata.

---

<div class="post-metadata">

**Author:** ![enzo\_ferro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/977dab/32.png) [@enzo\_ferro](https://www.ruby-forum.com/u/enzo_ferro)\
**Post date:** [December 19, 2007, 9:59am UTC](https://www.ruby-forum.com/t/consiglio-dati-attraverso-i-controller/123624/2 "2007-12-19T09:59:30Z")

</div>

Queste “sezioni” sono personalizzate/-abili per utente, oppure sono le  
stesse per tutti?

2007/12/19, Enzo F. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

---

<div class="post-metadata">

**Author:** ![enzo\_ferro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/977dab/32.png) [@enzo\_ferro](https://www.ruby-forum.com/u/enzo_ferro)\
**Post date:** [December 19, 2007, 10:07am UTC](https://www.ruby-forum.com/t/consiglio-dati-attraverso-i-controller/123624/3 "2007-12-19T10:07:31Z")

</div>

Carlo P. wrote:

> Queste “sezioni” sono personalizzate/-abili per utente, oppure sono le  
> stesse per tutti?

Grazie per la rapidissima risposta.  
Le sezioni sono le stesse per tutti, perÃ² questa mia applicazione ROR  
deve rispecchiare la struttura di un’applicazione in backend, ogni volta  
che mi loggo devo leggere il file XML dell’interfaccia REST di  
quest’ultima.

---

<div class="post-metadata">

**Author:** ![enzo\_ferro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/977dab/32.png) [@enzo\_ferro](https://www.ruby-forum.com/u/enzo_ferro)\
**Post date:** [December 19, 2007, 10:15am UTC](https://www.ruby-forum.com/t/consiglio-dati-attraverso-i-controller/123624/4 "2007-12-19T10:15:56Z")

</div>

Allora vale la pena avere un unico punto in cui leggi le informazioni  
(in formato XML, attraverso REST) dal backend…  
In prima battuta suggerirei un filtro (o un helper) in  
app/controller/application.rb in modo da averlo disponibile per TUTTI  
i controller che andrai a scrivere.

L’unico dubbio è relativo alle prestazioni: in questo modo OGNI click  
al tuo sito invoca una chiamata al backend e relativo processamento  
dell’XML risultante.  
Se questa “struttura” non cambia troppo frequentemente forse sarebbe  
il caso di averla in un file statico (che aggiorni tramite un  
cron…). Insomma è il principio della “cache” 🙂

2007/12/19, Enzo F. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

---

<div class="post-metadata">

**Author:** ![enzo\_ferro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/977dab/32.png) [@enzo\_ferro](https://www.ruby-forum.com/u/enzo_ferro)\
**Post date:** [December 19, 2007, 10:37am UTC](https://www.ruby-forum.com/t/consiglio-dati-attraverso-i-controller/123624/5 "2007-12-19T10:37:43Z")

</div>

In effetti la sessione ti offre il vantaggio di non dover ricaricare  
dal backend ogni volta le informazioni (si comporta come una  
cache…).  
Resta il “dubbio” sull’eleganza di tale approccio… Se le sessioni le  
usi comunque allora Ã¨ ok, se le usi appositamente…forse potresti  
farne a meno.

PerchÃ© non fai qualche prova?  
n fondo il discorso application helper/filter resta valido (punto  
unico!) poi vedi cosa Ã¨ meglio tra:

- sessione
- leggo dal backend ad ogni click
- leggo da un file apposito ad ogni click (tale file viene aggiornato  
via cron “ogni tanto”).

Il 19/12/07, Enzo F.[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

---

<div class="post-metadata">

**Author:** ![enzo\_ferro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/977dab/32.png) [@enzo\_ferro](https://www.ruby-forum.com/u/enzo_ferro)\
**Post date:** [December 19, 2007, 10:42am UTC](https://www.ruby-forum.com/t/consiglio-dati-attraverso-i-controller/123624/6 "2007-12-19T10:42:32Z")

</div>

Carlo P. wrote:

> In effetti la sessione ti offre il vantaggio di non dover ricaricare  
> dal backend ogni volta le informazioni (si comporta come una  
> cache…).  
> Resta il “dubbio” sull’eleganza di tale approccio… Se le sessioni le  
> usi comunque allora Ã¨ ok, se le usi appositamente…forse potresti  
> farne a meno.
> 
> PerchÃ© non fai qualche prova?  
> n fondo il discorso application helper/filter resta valido (punto  
> unico!) poi vedi cosa Ã¨ meglio tra:
> 
> - sessione
> - leggo dal backend ad ogni click
> - leggo da un file apposito ad ogni click (tale file viene aggiornato  
> via cron “ogni tanto”).

OK faccio qualche prova,  
ti ringrazio moltissimo,  
buona giornata.

---

<div class="post-metadata">

**Author:** ![enzo\_ferro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/977dab/32.png) [@enzo\_ferro](https://www.ruby-forum.com/u/enzo_ferro)\
**Post date:** [December 19, 2007, 10:30am UTC](https://www.ruby-forum.com/t/consiglio-dati-attraverso-i-controller/123624/7 "2007-12-19T10:30:09Z")

</div>

Carlo P. wrote:

> Allora vale la pena avere un unico punto in cui leggi le informazioni  
> (in formato XML, attraverso REST) dal backend…  
> In prima battuta suggerirei un filtro (o un helper) in  
> app/controller/application.rb in modo da averlo disponibile per TUTTI  
> i controller che andrai a scrivere.  
> L’unico dubbio ï¿½ relativo alle prestazioni: in questo modo OGNI click  
> al tuo sito invoca una chiamata al backend e relativo processamento  
> dell’XML risultante.  
> Se questa “struttura” non cambia troppo frequentemente forse sarebbe  
> il caso di averla in un file statico (che aggiorni tramite un  
> cron…). Insomma ï¿½ il principio della “cache” 🙂

Quindi scarteresti l’idea di metterle nella sessione?

La struttura non cambia molto frequentemente.

Grazie mille

---

<div class="post-metadata">

**Author:** ![enzo\_ferro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/977dab/32.png) [@enzo\_ferro](https://www.ruby-forum.com/u/enzo_ferro)\
**Post date:** [December 31, 2007, 4:17pm UTC](https://www.ruby-forum.com/t/consiglio-dati-attraverso-i-controller/123624/8 "2007-12-31T16:17:08Z")

</div>

> Io lo metterei in una variabile di classe di application\_controller.  
> Userei un metodo tipo:
> 
> def my\_data\_from\_xml  
> @@my\_data\_from\_xml ||= read\_data\_from\_xml  
> end
> 
> dentro a application\_controller.rb. Se non è chiaro il trucco del @@,  
> puoi immaginare che sia scritto così:

Oops, volevo dire “se non è chiaro il trucco del ||=”.

M

---

<div class="post-metadata">

**Author:** ![enzo\_ferro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/977dab/32.png) [@enzo\_ferro](https://www.ruby-forum.com/u/enzo_ferro)\
**Post date:** [December 31, 2007, 4:15pm UTC](https://www.ruby-forum.com/t/consiglio-dati-attraverso-i-controller/123624/9 "2007-12-31T16:15:58Z")

</div>

On Dec 19, 2007 10:30 AM, Enzo F. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > il caso di averla in un file statico (che aggiorni tramite un  
> > cron…). Insomma ï¿½ il principio della “cache” 🙂
> 
> Quindi scarteresti l’idea di metterle nella sessione?

La sessione, come regola, dovrebbe essere piÃ¹ vuota possibile e comunque  
contenere solo informazioni specifiche dell’utente.

Io lo metterei in una variabile di classe di application\_controller.  
Userei  
un metodo tipo:

def my\_data\_from\_xml  
@@my\_data\_from\_xml ||= read\_data\_from\_xml  
end

dentro a application\_controller.rb. Se non Ã¨ chiaro il trucco del @@,  
puoi  
immaginare che sia scritto cosÃ¬:

def my\_data\_from\_xml  
@@my\_data\_from\_xml = @@my\_data\_from\_xml || read\_data\_from\_xml  
end

che si legge: se @@my\_data\_from\_xml Ã¨ definito, restituisci il suo  
valore;  
altrimenti chiama la read\_data\_from\_xml, assegna il risultato a  
@@my\_data\_from\_xml, e restituiscilo. Lo scopo Ã¨ di eseguire la  
read\_data  
una volta sola per tutti gli utenti e tutte le sessioni.

Se le informazioni sul file xml cambiano raramente, allora ti basta fare  
un  
restart dell’applicazione quando cambiano e il nuovo valore verrÃ letto  
di  
nuovo.

Matteo
