Duda variable global

Buenos días lista,

me he creado un array global en el fichero application.rb (no esta
dentro de ninguna función) porque quiero que todas los controladores
tengan acceso, luego en la vista intento mostrar el contenido de este
array pero me da el error de que el objeto esta vacio y si q tiene
contenido.
Mi duda es la siguiente, es necesario indicar algo en el controlador
para que reconozca la variable global? o no haría falta?

Saludos y gracias

On Nov 30, 2007, at 11:26 AM, Melisa Fernández wrote:

me he creado un array global en el fichero application.rb (no esta
dentro de ninguna función) porque quiero que todas los controladores
tengan acceso, luego en la vista intento mostrar el contenido de
este array pero me da el error de que el objeto esta vacio y si q
tiene contenido.
Mi duda es la siguiente, es necesario indicar algo en el controlador
para que reconozca la variable global? o no haría falta?

Puedes explicar un poco mas en que sentido es global, como lo estas
definiendo en Ruby, y cual es su proposito?

– fxn

Hola de nuevo,

me refiero a que es global porque quiero tener acceso a su contenido en
toda la aplicación, para ello la he declaro en application.rb de esta
forma:

@comb= Array.new

@comb={:val1=>‘dato’, :val2=>‘dato’, :val3=>‘dato’}

Se supone (creo) q de esta forma tengo acceso a todo su contenido por lo
tanto no me haría falta hacer ninguna instancia de la variable en la
vista o en el controlador pudiendo utilizarla por ejemplo en la vista de
esta forma:

<%= debug(@comb)%>

Pero no me muestra ningún contenido. Es necesario indicar en el
controlador que quiero utilizar esta variable?

Saludos

Hola,

¿Estás segura de que todas tus acciones en todos tus controladores y
todas tus vistas necesitan esa variable? Si no, puede ser más cómodo
definirse un before_filter que llame a un método que lleva las dos
líneas que estás usando para la asignación. Además, haciéndolo así te
debería funcionar directamente.

El problema que parece que estás teniendo es que al declarar las
variables como variables de instancia pero fuera de cualquier método, se
están asignando realmente a la clase y no a la instancia. Resolverlo sin
usar un filtro pasaría probablemente por usar initialize en tu
application controller.

saludos,

javier ramírez

Hola Francesc,

he usado lo que has comentado y funciona correctamente, pero no entiendo
muy bien su funcionamiento. Environment.rb no se utiliza para
configuraciones de la aplicación?

Gracias y saludos

  1. Lo que estas definiendo es un Hash, no un Array.

    {:val1=>‘dato’, :val2=>‘dato’, :val3=>‘dato’}.class
    => Hash

  2. Yo lo definiria desde environment.rb o desde los initializers si
    estas en Rails Edge o RC2.

    SETTINGS = Hash.new
    SETTINGS[:comb] = {:val1=>‘dato’, :val2=>‘dato’, :val3=>‘dato’}

De este modo desde tu aplicación puedes acceder simplemente con …

 <%= SETTINGS[:comb] %>

Un saludo,

Francesc

On Nov 30, 2007, at 12:12 PM, Melisa Fernández wrote:

Saludos
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


name. Francesc E. i Martí
voice. +34 678.681.603

Si es una “variable” que utilizas en toda la aplicación es “correcto”
que esté allí y que se cargue al arrancar la aplicación. De hecho,
incluso se puede mejorar i utilizar un fichero “yml” donde almacenar
este tipo de “variables”. De esta manera podriamos cargar los datos
segun el entorno donde estamos ejecutando la aplicación (desarrollo,
testeo, stagging, producción …)

Un saludo,

Francesc

On Nov 30, 2007, at 1:13 PM, Melisa Fernández wrote:

Date: Fri, 30 Nov 2007 12:27:00 +0100
estas en Rails Edge o RC2.
Francesc

esta forma:
<%= debug(@comb)%>


http://lists.simplelogica.net/mailman/listinfo/ror-es

name. Francesc E. i Martí
voice. +34 678.681.603

Estoy con Javier. Me gustaría disuadirte del uso de variables globales,
te pongo un ejemplo con before_filter: Imaginate que en un catalogo
recuperas siempre el las imagenes asociadas a un id del catalogo.

@images = Catalog.find([:id]).all_images

y esto lo haces en casi todos los metodos de tu controllador.
Te puedes crear un metodo que se llame load_images

def load_images
    @images = Catalog.find([:id]).all_images
end

en la parte superior del controllador:

before_filter :load_images, :except =>

[:metedos, :que, :necesiten, :imagenes]

me tiene mejor pinta que andar con variables globlales (en la carrera
un práctica con variables globales era motivo de suspeneso, o eso
decían)

buenas,

que esté allí y que se cargue al arrancar la aplicación. De hecho,
incluso se puede mejorar i utilizar un fichero “yml” donde almacenar
este tipo de “variables”. De esta manera podriamos cargar los datos

en Rails 2 ya hay una forma organizada para dejar la
configuración organizada en diferentes ficheros. Se trata de meter tu configuración en
ficheros dentro del directorio config/initializers. Rails se encarga de
cargar todos esos al terminar de procesar la inicialización del
environment.

No he mirado si hay alguna manera de marcar dependencias entre los
diferentes initializers ni si se pueden indicar initializers separados
según tu variable environment, pero aún así te deja bastante limpio el
fichero de environment.

saludos,

javier ramírez

Muchas gracias por tu explicación, me ha sido de gran ayuda.

Saludos> From: [email protected]> To:
[email protected]> Date: Fri, 30 Nov 2007 13:28:58 +0100>
Subject: Re: [Ror-es] Duda variable global> > > Si es una “variable” que
utilizas en toda la aplicación es “correcto” > que esté allí y que se
cargue al arrancar la aplicación. De hecho, > incluso se puede mejorar i
utilizar un fichero “yml” donde almacenar > este tipo de “variables”. De
esta manera podriamos cargar los datos > segun el entorno donde estamos
ejecutando la aplicación (desarrollo, > testeo, stagging, producción
…)> > Un saludo,> > Francesc> > On Nov 30, 2007, at 1:13 PM, Melisa
Fernández wrote:> > > Hola Francesc,> >> > he usado lo que has comentado
y funciona correctamente, pero no > > entiendo muy bien su
funcionamiento. Environment.rb no se utiliza > > para configuraciones de
la aplicación?> >> > Gracias y saludos> >> >> > > From:
[email protected]> > > To: [email protected]> > >
Date: Fri, 30 Nov 2007 12:27:00 +0100> > > Subject: Re: [Ror-es] Duda
variable global> > >> > >> > > 1. Lo que estas definiendo es un Hash, no
un Array.> > >> > > >> {:val1=>‘dato’, :val2=>‘dato’,
:val3=>‘dato’}.class> > > => Hash> > >> > > 2. Yo lo definiria desde
environment.rb o desde los initializers > > si> > > estas en Rails
Edge o RC2.> > >> > > SETTINGS = Hash.new> > > SETTINGS[:comb] =
{:val1=>‘dato’, :val2=>‘dato’, :val3=>‘dato’}> > >> > > De este modo
desde tu aplicación puedes acceder simplemente con …> > >> > > <%=
SETTINGS[:comb] %>> > >> > > Un saludo,> > >> > > Francesc> > >> > > On
Nov 30, 2007, at 12:12 PM, Melisa Fernández wrote:> > >> > > >> > > >
Hola de nuevo,> > > >> > > > me refiero a que es global porque quiero
tener acceso a su > > contenido> > > > en toda la aplicación, para ello
la he declaro en application.rb > > de> > > > esta forma:> > > >> > > >
@comb= Array.new> > > >> > > > @comb={:val1=>‘dato’, :val2=>‘dato’,
:val3=>‘dato’}> > > >> > > > Se supone (creo) q de esta forma tengo
acceso a todo su contenido> > > > por lo tanto no me haría falta hacer
ninguna instancia de la> > > > variable en la vista o en el controlador
pudiendo utilizarla por> > > > ejemplo en la vista de esta forma:> > >

<%= debug(@comb)%>> > > >> > > > Pero no me muestra ningún
contenido. Es necesario indicar en el> > > > controlador que quiero
utilizar esta variable?> > > >> > > > Saludos> > > >> > > >> > > >> > >

Tecnología, moda, motor, viajes,…suscríbete a
nuestros boletines> > > > para estar a la última MSN> > > >
Newsletters_______________________________________________> > > > Ror-es
mailing list> > > > [email protected]> > > >
http://lists.simplelogica.net/mailman/listinfo/ror-es> > >> > > --> > >
name. Francesc E. i Martí> > > voice. +34 678.681.603> > >> > >
> > > Ror-es mailing
list> > > [email protected]> > >
http://lists.simplelogica.net/mailman/listinfo/ror-es> >> >> >
Tecnología, moda, motor, viajes,…suscríbete a nuestros boletines > >
para estar a la última MSN > >
Newsletters
> > Ror-es
mailing list> > [email protected]> >
http://lists.simplelogica.net/mailman/listinfo/ror-es> > --> name.
Francesc E. i Martí> voice. +34 678.681.603> >
_______________________________________________> Ror-es mailing list>
[email protected]>
http://lists.simplelogica.net/mailman/listinfo/ror-es