Rails:遍历哈希内的字符串数组(闪存错误消息)

时间:2018-09-23 19:39:58

标签: ruby-on-rails ruby

我正在尝试遍历以下内容:

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中。

任何帮助将不胜感激!

1 个答案:

答案 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将其格式化为所需的格式。