Rails 3 - 通知和错误闪存无法部分呈现

时间:2011-11-05 21:25:07

标签: ruby-on-rails views partial

我试图通过将部分布局移动到局部来清理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' %>

在部分中,flash哈希不是一个可识别的对象,并导致“当你没想到它时,你有一个零对象!”错误。

我已将代码移回application.html.erb,一切都很好。但我无法找到部分访问闪存哈希的答案。查看Rails指南中的“渲染和布局”我可以看到render()有多种方法可以将变量传递给部分,但是我没有成功解决它。有什么想法吗?

2 个答案:

答案 0 :(得分:17)

Goliatone的解决方案似乎有效,但最终却没有。我发现这对我不起作用的原因是我将我的部分命名为_flash。显然,Rails使用部分名称为部分创建局部变量(没有"_"字符。)所以我有一个变量冲突。只要我将部分的名称更改为_flash之外的其他内容,一切都能正常运行。我在这里找到了答案:Rails flash[:notice] always nil

答案 1 :(得分:1)

您可以在布局中对flash进行条件检查,如果存在,则渲染部分:

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

然后,如果它存在,它将按预期呈现。