2011-12-02 31 views
11

In Rails, dove dovrei definire la variabile che può essere riconosciuta da ogni livello di stack di Rails.variabile globale ampia applicazione

Ad esempio, vorrebbe avere una variabile CUSTOMER_NAME='John' cui si può accedere in helper, rastrello compito, controllore e modello. Dove dovrei definire questa variabile nell'app Rails?

Sto usando Rails v2.3.2

+0

Quello che stai chiedendo non è variabile, ma una costante, il che significa: non può essere impostato dall'interno dell'applicazione. Sono stato ingannato qui dal motore di ricerca perché qui viene usato il termine sbagliato. – Paul

risposta

8

volete una vera costante globale? Utilizzare ::COSTUMER_NAME. Vuoi una vera variabile globale? Utilizzare $COSTUMER_NAME (sconsigliato). Vuoi una variabile globale richiesta? Utilizzare lo Hash nel metodo #env.

+1

Vuoi dire creare una variabile globale estesa al server linux? – Mellon

+1

'ENV' e' # env' sono due cose diverse. 'ENV' è la costante globale che rappresenta l'ambiente Unix. '# env' è un metodo controller che restituisce l'ambiente rack corrente. – Reactormonk

+0

Faccio :: TESTABC = 'hola' e provo a stampare da una vista :: TESTABC e dice che non è definito –

14

Un approccio alternativo è quello di impostare una chiave per l'oggetto di configurazione nella config/application.rb, in questo modo:

MyApp::Application.configure do 
    # ... 
    config.my_key = 'some "global" value' 
end 

È quindi possibile accedere my_key da qualsiasi punto della app con proprio questo:

MyApp::Application.config.my_key 

Inoltre, Mike Perham ha descritto un approccio simile, anche se più completo, in his blog post.

+0

Non è una costante ma non variabile? Potrebbe essere modificato in un'applicazione durante il tempo di esecuzione? – Paul

+0

È una variabile e può essere modificata durante il runtime. –