导轨 3.2.6。我有以下控制器视图组合(简化,实际上分配是一些模型调用的结果):
ApplicationController
:
def set_menu_vars
@var1 = 1
@var2 = 2
end
SomeController < ApplicationController
:
def some_action
set_menu_vars
end
相应的(部分,共享)视图(haml):
- if @var1 > 0
%p= @var1
到目前为止一切顺利,直到我忘记了要调用的某些操作set_menu_vars
-现在我得到了一个例外undefined method '>' for nil:NilClass
。这是完全可以理解的,我想确保如果使用该局部视图,set_menu_vars
它会被自动调用。
所以我尝试将视图修改为
- @controller.set_menu_vars
...
(谷歌搜索)但得到类似的异常说@controller
是nil
. 好吧,这些答案似乎适用于 Rails 2,看到 . 我试图改变为
- controller.set_menu_vars
...
现在set_menu_vars
调用成功,但@var1
仍在nil
视图中。
所以问题是:完成任务的正确方法是什么?在控制器中为这些变量中的每一个提供一个方法(寻找实例变量以最多调用一次模型)?还是其他方式?
UPD:有问题的部分视图与控制器及其操作没有直接关系。这在逻辑上是布局的一部分(仪表板显示可能需要注意的任务组的链接)。因此,在大约一半的控制器操作中忘记调用set_menu_vars
多个分支是很自然的。if
另一方面,set_menu_vars
对数据库进行一些不那么短的查询,因此我希望仅在需要时才调用它(也就是说,如果确实呈现了相关视图)。