1

导轨 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
...

(谷歌搜索)但得到类似的异常说@controllernil. 好吧,这些答案似乎适用于 Rails 2,看到 . 我试图改变为

- controller.set_menu_vars
...

现在set_menu_vars调用成功,但@var1仍在nil视图中。

所以问题是:完成任务的正确方法是什么?在控制器中为这些变量中的每一个提供一个方法(寻找实例变量以最多调用一次模型)?还是其他方式?

UPD:有问题的部分视图与控制器及其操作没有直接关系。这在逻辑上是布局的一部分(仪表板显示可能需要注意的任务组的链接)。因此,在大约一半的控制器操作中忘记调用set_menu_vars多个分支是很自然的。if另一方面,set_menu_vars对数据库进行一些不那么短的查询,因此我希望仅在需要时才调用它(也就是说,如果确实呈现了相关视图)。

4

1 回答 1

1

它不是“铁路方式”。

控制器从模型中调用方法。

模型(文章.rb):

def do_something
 code
end

控制器(articles_controller.rb):

def index
 @article = Article.do_something
end

查看(文章/index.html.erb)

<%= @article %>

对不起,如果我误解了你的问题。

于 2012-06-20T13:02:40.233 回答