2011-08-03 25 views
7

¿hay alguna forma de persistir (preservar) los parámetros en el controlador Rails? Se debe pasar a cada acción, luego a cada vista y cada enlace.parámetro persistente en el controlador de Rails

Situación de ejemplo: Tengo la entidad A con su controlador. Además, no tengo otra entidad B, que depende de A. necesito para acceder al "padre" Una entidad muy a menudo, así que me gustaría tener todavía como

http://some_url/b_controller/b_action?a_entity=xyz

Respuesta

9

Usted debe ser capaz de hacer de todo, desde su controlador, utilizando una combinación de before_filter y default_url_options:

class MyController < ApplicationController 

    before_filter :set_a_entity 

    def set_a_entity 
    @a_entity = params['a_entity'] 
    # or @a_entity = Entity.find(params['a_entity']) 
    end 

    # Rails 3 
    def url_options 
    {:a_entity => @a_entity}.merge(super) 
    end 

    # Rails 2 
    def default_url_options 
    {:a_entity => @entity} 
    end 

end 

esto no resuelve el problema de establecer el valor inicial de @a_entity, pero esto se puede hacer desde cualquier lugar (vista, controlador, etc.).

Si desea que se pase este parámetro en varios controladores, puede reemplazar MyController < ApplicationController con ApplicationController < ActionController::Base y debería funcionar también.

Espero que esto ayude.

+2

No he usado su solución después de todo porque no necesito insistir en la opción para cada controlador para siempre, pero básicamente hace el trabajo. Gracias y lo siento por aceptar tarde. –

+0

Esa solución también funciona dentro de un único controlador específico. Muchas gracias. –

+0

@ F.Filippi gracias por el aviso, modifiqué mi respuesta porque la carcasa del controlador único es de hecho más útil. –

2

por qué no lo puso en un parámetro de sesión, entonces?

session["a_entity"] = "xyz" 

de esa manera puede acceder a él en todos sus otros controladores también hasta que lo borre o caduque.

más información aquí:

http://api.rubyonrails.org/classes/ActionController/Base.html

+0

Me gustaría tener mi aplicación RESTful. También encuentro que la sesión es un poco complicada debido a las URL almacenadas que pueden llevar a resultados diferentes con diferentes sesiones. –

+0

¿podría mostrarnos un ejemplo? es difícil imaginar cómo funciona su aplicación con algunas ideas generales – corroded

Cuestiones relacionadas