Rails 3 - 通知和错误闪存不能部分呈现
Posted
技术标签:
【中文标题】Rails 3 - 通知和错误闪存不能部分呈现【英文标题】:Rails 3 - notice and error flash cannot be rendered in a partial 【发布时间】:2011-11-05 21:25:06 【问题描述】:我试图清理application.html.erb
,将部分布局移动到部分中。我有以下代码用于处理 Flash 错误/通知:
<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>
这段代码在application.html.erb
中运行良好,直到我将它移到一个名为“_flash.html.erb
”的文件中并将其替换为以下内容:
<%= render 'layouts/flash' %>
在部分闪存哈希不是一个可识别的对象,并导致“您没想到有一个 nil 对象!”错误。
我已将代码移回 application.html.erb,一切都很好。但是我找不到在部分中访问闪存哈希的答案。查看 Rails Guide for "Rendering and Layouts" 我可以看到 render()
有多种方法可以将变量传递到部分中,但我没能弄清楚。有什么想法吗?
【问题讨论】:
你试过<%= render :partial => 'layouts/flash' %>
吗?另外,你在哪里打电话给这个render
?并保持部分布局我会说。
你绝对可以像这样为局部变量提供局部变量:render 'layouts/flash, :locals => :flash => flash
。但我不知道这是否真的是最好的选择。
Zabba 和 Topek - 感谢您的建议,不幸的是两者都不起作用。这两个建议都导致:“你有一个 nil 对象......”这真的很令人困惑!
【参考方案1】:
Goliatone 的解决方案似乎奏效了,但最终却没有奏效。我发现这对我不起作用的原因是我将我的部分命名为_flash
。显然,Rails 使用部分的名称(没有"_"
字符)为部分创建了一个局部变量。所以我有一个变量冲突。一旦我将部分的名称更改为 _flash
以外的名称,一切都会完美运行。我在这里找到了答案:Rails flash[:notice] always nil
【讨论】:
【参考方案2】:您可以在布局中对 flash 进行条件检查,如果存在则渲染部分:
<%= render 'layouts/flash' unless flash.nil?%>
然后,如果存在,它将按预期呈现。
【讨论】:
感谢 goliatone!这很好用,但让我感到困惑。 Ruby/Rails 在 application.html.erb 中时不会为 "if flash[:notice]" 发出 nil-object 错误,但是当 "if flash[:notice]" 在部分中时,它将发出 nil -对象错误!很奇怪!这是为什么呢? flash 是一个对象 <:flash::flashhash:0x00000004d1f278>, @closed=false, @flashes=, @ now=nil> ... 所以它不会是 nil .. 即使没有 flash 消息以上是关于Rails 3 - 通知和错误闪存不能部分呈现的主要内容,如果未能解决你的问题,请参考以下文章
NetApp 全闪存数据存储阵列 AFF A 系列:智能、至强、至信