首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails flash[:notice]始终为空

Rails flash[:notice]始终为空
EN

Stack Overflow用户
提问于 2011-11-02 03:54:47
回答 2查看 4.3K关注 0票数 8

我不明白为什么我的rails视图不能识别flash:通知或flash:error。我一直收到以下关于正在呈现的部分视图的错误。具体的错误是:

ActionView::Template::Error (您没有预料到的nil对象!您可能需要一个Array的实例。计算nil时出错。[]):

在我的控制器里我有

代码语言:javascript
复制
  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文件中,我通过:

代码语言:javascript
复制
<%= render "shared/flash" %>

partial具有以下代码。

代码语言:javascript
复制
<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>

但是,如果不是呈现我在<%=通知中抛出的部分,%>会呈现出通知。

如果我将部分代码放在index.html.erb文件的顶部,它将正确呈现。因此,我假设我错误地呈现了部分视图?

任何帮助都是非常感谢的。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2011-11-23 02:51:17

不要给你的局部闪存命名。Ruby on Rails创建一个与partial变量同名的局部变量。在您的示例中,将创建一个flash局部变量。

将你的partial重命名为flash以外的其他名称,它应该会起作用。

此外,你不应该在你的部分底部将flash设置为零。让Rails为你解决这个问题吧。

票数 26
EN

Stack Overflow用户

发布于 2011-11-23 03:11:31

你必须将flash传递给部分:

代码语言:javascript
复制
<%= render 'shared/flash', flash: flash %>

或者更长一点:

代码语言:javascript
复制
<%= render partial: 'shared/flash', locals: { flash: flash } %>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7972084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档