2010-03-01 13 views

Respuesta

5

Si desea compartir el valor a través de los métodos de una misma instancia de controlador de entonces, declarar una variable de instancia:

class BarsController < UsersController 

    before_filter :init_foo_list 

    def method1 
    render :method2 
    end 

    def method2 
    @foo_list.each do | item| 
     # do something 
    end 
    end 

    def init_foo_list 
    @foo_list ||= ['Money', 'Animals', 'Ummagumma'] 
    end 

end 

Si desea compartir el valor a través de dos controladores withn una sesión, a continuación:

class BarsController < UsersController 

    before_filter :init_foo_list 

    def method1 
    render :controller => "FoosController", :action => "method2" 
    end 

    def init_foo_list 
    params[:shared_param__] ||= ['Money', 'Animals', 'Ummagumma'] 
    end  
end 

class FoosController < UsersController 

    def method2 
    params[:shared_param__].each do | item| 
     # do something 
    end 
    end 
end 

Dale un nombre único a la clave compartida parámetro con el fin de evitar la colisión con las claves existentes.

Otra opción es almacenar el conjunto compartido en el anuncio de la sesión eliminarlo antes del renderizado final.

+0

attr_accessor significa que puedo acceder a esta variable en toda la instancia de la clase. Hmm ... ¡Intentaré esto! ¡Gracias! – Antiarchitect

+0

La primera manera no funciona. foo_list es nil en method2 Pero el primer método se llama antes del segundo. ¿Y cómo puedo definir foo_list no en métodos sino en inicializar? def initialize self.foo_list = ['Money', 'Animals', 'Ummagumma'] end De esta manera o de alguna otra manera? – Antiarchitect

+1

Establezca el valor en un 'before_filter' –

6

puede usar caché de raíles.

Rails.cache.write("list",[1,2,3]) 
Rails.cache.read("list") 
+1

¡Tu camino parece estar funcionando! No encontré buenos documentos para Rails.cache, ¿me puede dar un enlace, por favor? – Antiarchitect

+3

Pero, ¿qué sucede cuando diferentes sesiones tienen valores diferentes? –

+1

Yo segundo 'Tony'. A menos que garantice la exclusividad del nombre 'list' en la sesión, esta solución fallará durante las solicitudes simultáneas. –

1

No estoy seguro de si mi respuesta está cerca de su requerimiento, pero esto es lo que hago si quiero obtener el valor de un objeto/modelo que se capta en una acción del controlador y la base sobre la que el valor Necesito buscar otros valores en otra acción del controlador. hago uso de variables de clase y los usen durante mi acción del controlador

por ejemplo:

@pages=Post.find.all` 

@@[email protected](any manipulations) 

ahora @@my_vales se puede utilizar en cualquier acción de ese controlador ..

creo que sirve ...

Cuestiones relacionadas