Rails flash [:notice]总是零

时间:2011-11-01 19:54:47

标签: ruby-on-rails

我无法弄清楚为什么我的rails视图无法识别flash [:notice]或flash [:error]。关于正在呈现的局部视图,我一直收到以下错误。具体错误是:

ActionView :: Template :: Error(当你没想到它时,你有一个nil对象! 您可能期望一个Array实例。 在评估nil时发生错误。[]):

在我的控制器中我有

  def index
    @organisms = Organism.all
    flash[:error] = "test"
    flash[:notice] = "test"
    respond_to do |format|
      format.html
      format.json  { render :json => @organisms }
    end
  end

在我的index.html.erb文件中,我渲染了一个部分:

<%= render "shared/flash" %>

部分具有以下代码。

<div id="flashes">

  <% if flash[:notice] %>
    <p id="flash_notice" class="messages notice"><%= flash[:notice] %></p>
    <%= javascript_tag "$('#flash_notice').effect('highlight',{},1000);" %>
  <% end %>
  <% if flash[:error] || flash[:errors] %>
    <p id="flash_errors" class="messages errors"><%= flash[:error] || flash[:errors] %></p>
    <%= javascript_tag "$('#flash_errors').effect('highlight',{},1000);" %>
  <% end %>

  <% flash[:error] = flash[:errors] = flash[:notice] = nil %>
</div>

但是,如果不是渲染部分我扔掉&lt;%= notice%&gt;它发出通知。

如果我获取部分代码并将其粘贴在index.html.erb文件的顶部,则会正确呈现。因此,我假设我错误地渲染了局部视图?

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:26)

请勿命名部分闪光灯。 Ruby on Rails创建一个与partial相同名称的局部变量。在您的情况下,正在创建一个flash局部变量。

将你的局部重命名为闪光以外的东西,它应该有用。

此外,您不需要在部分底部将flash设置为nil。让Rails为你处理。

答案 1 :(得分:2)

你必须将闪光灯传递给部分:

<%= render 'shared/flash', flash: flash %>

或者更长一点:

<%= render partial: 'shared/flash', locals: { flash: flash } %>