【发布时间】:2012-06-20 10:57:11
【问题描述】:
导轨 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:有问题的局部视图与控制器及其操作没有直接关系。这在逻辑上是布局的一部分(仪表板显示可能需要注意的任务组的链接)。因此,在大约一半的控制器操作中,忘记在几个if 分支中调用set_menu_vars 是很自然的。另一方面,set_menu_vars 对数据库进行了一些不那么短的查询,所以我希望当且仅在需要时调用它(也就是说,如果真正呈现了相关视图)。
【问题讨论】:
标签: ruby-on-rails-3 model-view-controller