【发布时间】:2026-01-06 13:40:01
【问题描述】:
在我的 Rails 4.2.0 应用程序中,我在视图模板中有以下代码:
<% if flash[:tutorial].present? %>
<% flash.slice(:tutorial) %>
<% end %>
<% flash.each do |name, msg| %>
<div class="flash <%= name %>">
<p>
<%= msg %>
</p>
</div>
<% end %>
然而它会抛出一个错误:
Undefined method 'slice' for #<ActionDispatch::Flash::FlashHash:0x0818>
有没有人知道我可能缺少什么或如何让它发挥作用?
【问题讨论】:
-
你想做什么?我不知道你为什么要这样使用
slice。 -
如果我有像
{ :tutorial => "Message", :notice => "Message", :success => "Message" }这样的闪存,我想删除除:tutorial键之外的所有键。 -
但这与
slice有什么关系?为什么不直接渲染flash[:tutorial]?这是我在这里试图从你那里得到的信息,slice的任何内容都不需要渲染flash[:tutorial]中的任何值。 -
也许您可以将闪存值作为哈希分配给变量并修改为:
flash_hash = flash.to_hash然后<%= flash_hash.each { |k,_v| flash_hash.delete(k) if k != 'notice' } %> -
好的,既然你知道only键是
tutorial,为什么要循环呢?为什么不直接输出<% if flash[:tutorial] %><div class="flash tutorial"><p><%= flash[:tutorial] %></p></div><% end %>?
标签: ruby-on-rails ruby actiondispatch