Rails 3.2.6。我有一個跟隨控制器視圖組合(簡化的,在現實中分配是到的一些模型調用的結果):Rails 3:確保從視圖中調用控制器方法
ApplicationController
:
def set_menu_vars
@var1 = 1
@var2 = 2
end
SomeController < ApplicationController
:
def some_action
set_menu_vars
end
相應的(局部,共享)view(haml):
- if @var1 > 0
%p= @var1
因此fa如此好,直到我忘記了在某個行動中致電set_menu_vars
- 現在我得到一個例外undefined method '>' for nil:NilClass
。這是很容易理解的,我想確保如果使用該部分視圖,set_menu_vars
被自動調用。
所以我嘗試修改視圖
- @controller.set_menu_vars
...
(Google搜索),但得到類似的異常說@controller
是nil
。那麼,這些答案似乎是針對Rails 2的。我試圖改變
- controller.set_menu_vars
...
現在set_menu_vars
調用成功,但@var1
仍然在視圖nil
。
所以問題是:什麼是正確的方式來完成任務?在控制器中爲每個變量設置一個方法(查找實例變量以最多一次對模型進行調用)?或者以其他方式?
UPD:所討論的局部視圖與控制器及其操作無直接關係。這在邏輯上是佈局的一部分(儀表板顯示可能需要注意的任務組的鏈接)。所以這是非常自然的,因爲忘記在約一半的控制器動作中的幾個if
分支中調用set_menu_vars
。另一方面,set_menu_vars
對數據庫做了一些不那麼簡短的查詢,所以我希望在需要時調用它(當然,如果視圖是真正呈現的話)。
是的,你誤解了我的問題,可能是因爲我沒有足夠清楚地詢問它。請參見UPD。 –