Ruby on rails Rails 3-通知和错误闪存不能在局部视图中呈现

Ruby on rails Rails 3-通知和错误闪存不能在局部视图中呈现,ruby-on-rails,views,partial,Ruby On Rails,Views,Partial,我试图清理application.html.erb,方法是将部分布局移动到部分。我有以下处理闪存错误/通知的代码: <div id="flash"> <% if flash[:notice] %> <h3 class="info_box"><%= flash[:notice] %></h3> <% end %> <% if flash[:error] %> <h3 class="

我试图清理
application.html.erb
,方法是将部分布局移动到部分。我有以下处理闪存错误/通知的代码:

<div id="flash">
  <% if flash[:notice] %>
    <h3 class="info_box"><%= flash[:notice] %></h3>
  <% end %>
  <% if flash[:error] %>
    <h3 class="error_box"><%= flash[:error] %></h3>
  <% end %> 
</div>
在部分示例中,flash散列不是可识别的对象,并导致“当您没有预料到它时,您有一个nil对象!”错误


我已经将代码移回application.html.erb,一切都很好。但是我找不到一个在部分内存中访问flash散列的答案。查看Rails指南中的“渲染和布局”,我可以看到
render()
有多种方法可以将变量传递到部分中,但我没有找到答案。有什么想法吗?

您可以在布局中放置flash的条件检查,如果存在,则渲染部分:

<%= render 'layouts/flash' unless flash.nil?%>


然后,如果它存在,它将按预期渲染。

歌利亚通的解决方案似乎有效,但最终没有。我发现这对我不起作用的原因是我把我的部分
\u命名为flash
。显然,Rails使用partial的名称为partial创建了一个局部变量(没有
“quot
字符),所以我遇到了一个变量冲突。只要我将partial的名称改为
\u flash
以外的其他名称,一切都很顺利。我在这里找到了答案:

您是否尝试了
“布局/flash”>
?另外,您从何处调用此
render
?我想说的是,不要让部分出现在布局中。你完全可以像这样为部分提供局部变量:
render'layouts/flash,:locals=>{:flash=>flash}
。但我不知道这是否真的是最好的选择。Zabba和Topek-谢谢你的建议,不幸的是两者都不起作用。这两个建议都会导致:“你有一个零对象……”这真是令人困惑!谢谢歌利亚通!这很管用,但我很困惑。Ruby/Rails在application.html.erb中不会对“if flash[:notice]”发出nil对象错误,但当“if flash[:notice]”在partial中时,它会发出nil对象错误!很奇怪!为什么?闪光灯是个物体。。。所以不会是零。。即使没有即时消息
<%= render 'layouts/flash' unless flash.nil?%>