2011-08-03 45 views
7

有什麼方法可以在Rails控制器中保存(保存)參數嗎?它應該傳遞給每一個行動,然後傳遞給每一個觀點和每一個環節。Rails控制器中的持久參數

示例情況: 我有實體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,但這可以從任何地方完成(視圖,控制器等)。

如果你想讓這個參數在多個控制器中傳遞,你可以用ApplicationController < ActionController::Base代替MyController < ApplicationController,它也可以工作。

希望這會有所幫助。

+2

我還沒有使用過您的解決方案,因爲我不需要永遠堅持每個控制器的選項,但基本上它可以完成這項工作。謝謝你,遲到接受抱歉。 –

+0

該解決方案也適用於特定的單個控制器。非常感謝你。 –

+0

@ F.Filippi謝謝你的提醒,我修改了我的答案,因爲單個控制器的情況確實更有用。 –

2

爲什麼不把它放在一個會話參數呢?

session["a_entity"] = "xyz" 

這樣你就可以在你的所有其他控制器中訪問它,直到你清除它或者過期。

更多的信息在這裏:

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

+0

我想讓我的應用程序RESTful。另外,我發現會話有點棘手,因爲存儲的URL會導致不同會話的結果不同。 –

+0

你能告訴我們一個例子嗎?有點難以想象您的應用程序如何與一些常規想法結合 – corroded