出于某种原因,虽然看起来很简单,但我尝试从部分内部的闪存中读取数据-6ren">
gpt4 book ai didi

ruby-on-rails - 尝试使用 Rails session 闪存,但收到 nil.[] 错误?

转载 作者:行者123 更新时间:2023-12-04 05:43:27 25 4
gpt4 key购买 nike

<%# Flash-based notifications %>
<% if flash[:error].present? or flash[:notice].present? %>
<div class="messages <%= flash[:error] ? 'error' : 'notice' %>">
<ul id="feedback">
<% if flash[:error].present? %>
<li><%= flash[:error] %></li>
<% end %>
<% if flash[:notice].present? %>
<li><%= flash[:notice] %></li>
<% end %>
</ul>
</div>
<% end %>

出于某种原因,虽然看起来很简单,但我尝试从部分内部的闪存中读取数据会产生此错误,因为闪存设置为 nil .我需要手动初始化它还是什么?

这是 Rails 3.1.0。错误在代码片段的第 2 行,它试图访问 flash[:error] .
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.[]

我肯定错过了什么。我绝对不会在任何地方覆盖它。

最佳答案

他们在这里的关键是您正在尝试访问部分内的闪存。您需要在渲染方法中执行以下操作以将闪存哈希传递给部分:

render YOUR_PARTIAL, :flash => flash

http://guides.rubyonrails.org/layouts_and_rendering.html#passing-local-variables

编辑:

更简单的解决方案: 将您的部分重命名为 _flash 以外的任何内容。

因为你的部分被称为 flash,所以发生了:

Every partial also has a local variable with the same name as the partial (minus the underscore). You can pass an object in to this local variable via the :object option:



flash 对象被一个局部变量覆盖了,这个局部变量是用局部的名字创建的。

为了澄清这一点,假设您有一个评论模型并在部分中呈现评论,您可以执行以下操作:
#_comment.html.erb
<h1>comment.user.name</h1>
<p>comment.body</p>

您可以通过执行以下操作来调用此部分:
render @customer

现在用 flash 替换 customer 这个词,你就会明白为什么这是一个问题。

这个功能是 通常方便是导致问题的原因。

关于ruby-on-rails - 尝试使用 Rails session 闪存,但收到 nil.[] 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7532674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com