这可能是一个愚蠢的问题,但我很想知道它是如何运作的。这是场景:
控制器
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 ?
答案 0 :(得分:0)
在第一种情况下:在控制器操作中使用render
时,它不会自动继承控制器操作范围。您必须将变量传递给render
调用。类似的东西:
render :template => "show", :layout => "lightbox", :locals => {abc: @abc}
在视图模板中,您将能够访问变量abc
(不包含@
),其中包含控制器@abc
变量内容
@abc
变量。所以你可以访问它。
this other question中提供的答案可以帮助您了解正在发生的事情。而Rails API docs也是一个很好的参考