2011-12-02 16 views
11

En Rails, donde debería definir la variable que puede ser reconocida por cada capa de pilas de Rails.application wide global variable

Por ejemplo, me gustaría tener una variable CUSTOMER_NAME='John' que se puede acceder en ayudante, rastrillo tarea, controlador y modelo. ¿Dónde debería definir esta variable en la aplicación Rails?

estoy usando rieles v2.3.2

+0

Lo que pregunta no es una variable, sino una constante, lo que significa que no se puede configurar desde la aplicación. Aquí, el motor de búsqueda me malinterpretó porque aquí se usa el término equivocado. – Paul

Respuesta

8

¿Quieres una verdadera constante global? Use ::COSTUMER_NAME. ¿Quieres una verdadera variable global? Use $COSTUMER_NAME (desaconsejado). ¿Desea una variable request-global? Use Hash en el método #env.

+1

¿Quiere decir crear una variable global de servidor de Linux? – Mellon

+1

'ENV' y' # env' son dos cosas diferentes. 'ENV' es la constante global que representa el entorno Unix. '# env' es un método de controlador que devuelve el entorno de rack actual. – Reactormonk

+0

Hago :: TESTABC = 'hola' y trato de imprimir desde una vista :: TESTABC y dice que no está definido –

14

Un enfoque alternativo es establecer una tecla en el objeto de configuración en config/application.rb, así:

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

A continuación, puede acceder my_key desde cualquier lugar de su aplicación con sólo esto:

MyApp::Application.config.my_key 

Además, Mike Perham ha descrito un enfoque similar, aunque más completo, in his blog post.

+0

¿No es eso una constante pero no es variable? ¿Podría ser cambiado en una aplicación durante el tiempo de ejecución? – Paul

+0

Es una variable y se puede cambiar durante el tiempo de ejecución. –