有什麼方法可以在Rails控制器中保存(保存)參數嗎?它應該傳遞給每一個行動,然後傳遞給每一個觀點和每一個環節。Rails控制器中的持久參數
示例情況: 我有實體A及其控制器。此外,我還有一個實體B這取決於答:我需要經常訪問「父」一個實體,所以我想還是有它作爲
http://some_url/b_controller/b_action?a_entity=xyz
有什麼方法可以在Rails控制器中保存(保存)參數嗎?它應該傳遞給每一個行動,然後傳遞給每一個觀點和每一個環節。Rails控制器中的持久參數
示例情況: 我有實體A及其控制器。此外,我還有一個實體B這取決於答:我需要經常訪問「父」一個實體,所以我想還是有它作爲
http://some_url/b_controller/b_action?a_entity=xyz
您應該能夠從你的控制器做的一切,利用before_filter
和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
這並不解決問題設置初始值@a_entity
,但這可以從任何地方完成(視圖,控制器等)。
如果你想讓這個參數在多個控制器中傳遞,你可以用ApplicationController < ActionController::Base
代替MyController < ApplicationController
,它也可以工作。
希望這會有所幫助。
爲什麼不把它放在一個會話參數呢?
session["a_entity"] = "xyz"
這樣你就可以在你的所有其他控制器中訪問它,直到你清除它或者過期。
更多的信息在這裏:
http://api.rubyonrails.org/classes/ActionController/Base.html
我想讓我的應用程序RESTful。另外,我發現會話有點棘手,因爲存儲的URL會導致不同會話的結果不同。 –
你能告訴我們一個例子嗎?有點難以想象您的應用程序如何與一些常規想法結合 – corroded
我還沒有使用過您的解決方案,因爲我不需要永遠堅持每個控制器的選項,但基本上它可以完成這項工作。謝謝你,遲到接受抱歉。 –
該解決方案也適用於特定的單個控制器。非常感謝你。 –
@ F.Filippi謝謝你的提醒,我修改了我的答案,因爲單個控制器的情況確實更有用。 –