我對Rails稍微陌生(即愚蠢且需要一些教導)。在其他控制器中調用控制器的方法(保持DRY)
我有一個控制器(稱爲ControllerFoo
),執行一個特定的任務(theMethod
),這可能在其他控制器(例如,從ControllerBar
)有用。所以,當然,該方法被定義爲self.theMethod
在ControllerFoo
(這意味着它是一個類方法,對嗎?),並在ControllerBar
中訪問爲ControllerFoo.theMethod
。困惑了嗎?
問題出在這裏:ControllerFoo.theMethod
使用會話數據,當從ControllerBar
調用時,會話爲零。實際上,從本身來看,會話似乎也是零。我猜我在說的是類方法不能訪問會話數據?
<咆哮> 我恨如何會話數據不能簡單地在任何地方像PHP < /咆哮>
所以現在訪問,因爲我不是足夠聰明,知道如何正確地做到這一點,我剛剛在我的應用程序的幾個地方重複了邏輯。但這根本不是乾的,我討厭它。
那麼如何在一個控制器中創建一個方法,該方法可以被其他控制器訪問並且也可以訪問會話數據?
class ControllerFoo < ApplicationController
def self.theMethod (greeting)
p "#{greeting} #{session[:user]}!"
end
end
class ControllerBar < ApplicationController
def show
ControllerFoo.theMethod("Hello,")
end
end
我實際上想到了這兩種選擇,所以我猜我沒有我想象的那麼糟糕:)接下來是一個問題:理論上的'theMethod'是一個創建操作。你會繼續嗎? –
將複雜的代碼移動到模型或庫中。您始終可以同時創建新控制器並調用常用方法。目標是保持你的控制器方法非常短。 – DGM
我對這個問題有點困惑。對於我將影響代碼組織的創建操作,有什麼特別之處?整個行動是完全一樣的嗎?如果是這樣,爲什麼它在單獨的控制器? –