我无法弄清楚为什么我的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
Run Code Online (Sandbox Code Playgroud)
在我的index.html.erb文件中,我渲染了一个部分:
<%= render "shared/flash" %>
Run Code Online (Sandbox Code Playgroud)
部分具有以下代码.
<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>
Run Code Online (Sandbox Code Playgroud)
但是,如果不是渲染部分我扔进<%= notice%>,它会渲染通知.
如果我获取部分代码并将其粘贴在index.html.erb文件的顶部,则会正确呈现.因此,我假设我错误地渲染局部视图?
任何帮助深表感谢.谢谢!
小智 26
不要命名部分闪光灯.Ruby on Rails创建一个与partial相同名称的局部变量.在您的情况下,正在创建一个Flash局部变量.
将你的部分重命名为闪存以外的其他东西,它应该工作.
此外,您不需要在部分底部将flash设置为nil.让Rails为您解决这个问题.