我试图通过将部分布局移动到局部来清理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()
有多种方法可以将变量传递给部分,但是我没有成功解决它。有什么想法吗?
答案 0 :(得分:17)
Goliatone的解决方案似乎有效,但最终却没有。我发现这对我不起作用的原因是我将我的部分命名为_flash
。显然,Rails使用部分名称为部分创建局部变量(没有"_"
字符。)所以我有一个变量冲突。只要我将部分的名称更改为_flash
之外的其他内容,一切都能正常运行。我在这里找到了答案:Rails flash[:notice] always nil
答案 1 :(得分:1)
您可以在布局中对flash进行条件检查,如果存在,则渲染部分:
<%= render 'layouts/flash' unless flash.nil?%>
然后,如果它存在,它将按预期呈现。