2009-10-15 600 views

Respuesta

15

El enfoque más común es envolver la variable de clase en un método de ayuda:

# in /app/controllers/foo_controller.rb: 
class FooController < ApplicationController 
    @@bar = 'baz' 

    def my_action 
    end 

    helper_method :bar 

    def bar 
    @@bar 
    end 
end 

# in /app/views/foo/my_action.html.erb: 
It might be a class variable, or it might not, but bar is "<%= bar -%>." 
+0

prácticamente la solución obvia, no sé por qué no opté por esto en primer lugar –

3

Desafortunadamente, la clase (@@variables) no se copia en la vista. Usted todavía puede ser capaz de llegar a ellos a través de:

controller.instance_eval{@@variable} 

o

@controller.instance_eval{@@variable} 

o algo menos grave.

Con rieles, 99.9 de cada 100 personas nunca debería estar haciendo esto, o al menos no puedo pensar en una buena razón.

+0

Si bien esto no es lo que planeo usar, responde mi pregunta original –

1

respuesta de Rosen es agradable porque oculta qué tipo de variable "bar" es, pero si usted tiene una gran cantidad de tales variables, la necesidad de definir un grupo de métodos auxiliares no es atractiva. Estoy usando el siguiente en mi controlador:

@bar = @@bar ||= some_expensive_call 

De esa manera, "some_expensive_call", sólo se hace una vez, y el resultado se copia en @bar para cada instancia (por lo que la vista se puede acceder a él como @bar)

Cuestiones relacionadas