2011-08-03 12 views
7

Railsコントローラのパラメータを永続化(保存)する方法はありますか?それはすべてのアクションに渡され、すべてのビューとすべてのリンクに渡されます。Railsコントローラの永続パラメータ

例状況: 私はコントローラを持つエンティティAを持っています。また、私は非常に頻繁に実体を「親」にアクセスする必要があるA.に依存している別のエンティティBを持っているので、私はなぜに入れない

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

答えて

9

あなたはbefore_filterdefault_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 

これで問題が解決しません@a_entityの初期値を設定することができますが、これはどこからでも(ビュー、コントローラなど)行うことができます。

このパラメータを複数のコントローラに渡す場合は、MyController < ApplicationControllerApplicationController < ActionController::Baseに置き換えることもできます。

これが役に立ちます。

+2

私はあなたのソリューションを永遠にすべてのコントローラに永続させる必要はないので、私はあなたのソリューションを使用しませんでした。ありがとうございました。 –

+0

このソリューションは、特定の単一コントローラ内でも機能します。どうもありがとうございました。 –

+0

@ F.Filippiがヘッドアップに感謝して、私は自分の答えを修正しました。 –

2

として、まだそれをしたいのですがセッションパラメータ?

session["a_entity"] = "xyz" 

このようにして、他のすべてのコントローラでクリアするか、有効期限が切れるまでアクセスできます。ここ

詳細:

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

+0

私は自分のアプリをRESTfulにしたいと思っています。また、異なるセッションで異なる結果につながる可能性のある格納されたURLのため、セッションが少し難解だとわかります。 –

+0

私たちに例を示すことができますか?あなたのアプリがいくつかの一般的なアイデアの仕組みを想像するのはちょっと難しいです – corroded

関連する問題