内部布局中的Rails实例变量可访问性

时间:2015-08-12 05:22:59

标签: ruby-on-rails

这可能是一个愚蠢的问题,但我很想知道它是如何运作的。这是场景:

控制器

def some_method
  @abc = true
  render :template => "show", :layout => "lightbox"
end

现在,当我尝试在布局中访问实例变量 @abc 时,它变为 nil 。但是,对于以下情况:

控制器

def some_method
  render :template => "show", :layout => "lightbox"
end

查看(show.html.haml)

- @abc = true

该变量可在布局内访问。

我的问题是:

为什么我在视图中定义实例变量有所不同,它可以在布局中访问,但是如果在控制器中定义相同的变量而不是查看,它无法访问,并且 nil

1 个答案:

答案 0 :(得分:0)

在第一种情况下:在控制器操作中使用render时,它不会自动继承控制器操作范围。您必须将变量传递给render调用。类似的东西:

render  :template => "show", :layout => "lightbox",  :locals => {abc: @abc}

在视图模板中,您将能够访问变量abc(不包含@),其中包含控制器@abc变量内容

<小时/> 在第二种情况下:当处理模板&#34; show&#34;时,rails在视图范围内创建@abc变量。所以你可以访问它。 this other question中提供的答案可以帮助您了解正在发生的事情。而Rails API docs也是一个很好的参考