2011-08-03 3 views
7

est-il possible de conserver (conserver) les paramètres dans le contrôleur Rails? Il devrait être transmis à chaque action, puis à chaque vue et chaque lien. Exemple: J'ai l'entité A avec son contrôleur. D'ailleurs, j'ai une autre entité B qui dépend A. J'ai besoin pour accéder au « parent » Une entité très souvent, donc je voudrais avoir encore commeParamètre persistant dans le contrôleur Rails

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

Répondre

9

Vous devriez être capable de tout faire, de votre contrôleur, en utilisant une combinaison de before_filter et 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 

Cela ne résout pas le problème de définir la valeur initiale de @a_entity, mais cela peut être fait de n'importe où (vue, contrôleur, etc).

Si vous souhaitez que ce paramètre soit transmis dans plusieurs contrôleurs, vous pouvez remplacer MyController < ApplicationController par ApplicationController < ActionController::Base et cela devrait également fonctionner.

Espérons que cela aide.

+2

Je n'ai pas utilisé votre solution après tout parce que je n'ai pas besoin de persister l'option pour chaque contrôleur pour toujours, mais fondamentalement, il fait le travail. Merci et désolé pour l'acceptation tardive. –

+0

Cette solution fonctionne également à l'intérieur d'un seul contrôleur spécifique. Merci beaucoup. –

+0

@ F.Filippi merci pour le heads-up, j'ai modifié ma réponse parce que le cas du contrôleur unique est en effet plus utile. –

2

pourquoi ne pas le mettre dans un paramètre de session alors? De cette façon, vous pouvez également y accéder dans tous vos autres contrôleurs jusqu'à ce que vous l'effaciez ou qu'il expire.

plus d'info ici:

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

+0

Je voudrais avoir mon application RESTful. En outre, je trouve la session un peu difficile en raison des URL stockées qui peuvent conduire à des résultats différents avec différentes sessions. –

+0

pourriez-vous nous montrer un exemple? il est un peu difficile d'imaginer comment votre application fonctionne avec quelques idées générales – corroded

Questions connexes