我正在尝试遍历以下内容:
flash = {"danger"=>["Password can't be blank", "Name can't be blank"]}
我遍历这些闪存错误消息的代码如下:
<% flash.each do |name, message| %>
<div class="alert alert-<%= name %>">
<%= message %>
</div>
<% end %>
这是我设置Flash的方式(我将其更改为允许多个错误,所以我认为):
flash[:danger] = []
@user.errors.full_messages.each do |message|
flash[:danger] << message
end
render :new
以下是我似乎得到的回报,而不是多个div(每个错误消息都独立):(均在div.alert alert-danger中,这是正确的):
[“密码不能为空”,“名称不能为空”]
我似乎无法弄清楚如何简单地逐个遍历每条消息。我需要班级的键(危险)和值(错误消息)才能显示在div中。
任何帮助将不胜感激!
答案 0 :(得分:1)
您需要的不是您所拥有的,而是:
<% flash.each do |name, message| %>
<div class="alert alert-<%= name %>">
<% if Array === message %>
<ul>
<% message.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<% else %>
<%= message %>
<% end %>
</div>
<% end %>
如果您想稍微清理一下,可以将所有Flash消息设置为数组,并以这种方式消除条件。然后您将:
<% flash.each do |name, messages| %>
<div class="alert alert-<%= name %>">
<ul>
<% messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
在这种情况下,即使是单条消息,您最终都会得到列表项,但是您可以使用CSS将其格式化为所需的格式。