【问题标题】:Rails: Iterating over array of strings inside hash (flash error messages)Rails:迭代哈希内的字符串数组(闪存错误消息)
【发布时间】:2018-09-24 05:54:58
【问题描述】:

我正在尝试迭代以下内容:

flash = {"danger"=>["Password can't be blank", "Name can't be blank"]}

我的迭代这些 flash 错误消息的代码如下:

  <% 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.alert alert-danger 中,这是正确的):

["密码不能为空", "姓名不能为空"]

我似乎无法弄清楚如何简单地单独迭代每条消息。我需要我的班级的密钥(危险),以及在 div 中显示的值(错误消息)。

任何帮助将不胜感激!

【问题讨论】:

  • 为什么要覆盖默认的flash
  • 尝试 each_pair 而不是 each
  • @Pavan 我是新人,我不明白你的意思
  • 我的问题是我希望能够在 flash[:danger] 中包含多个错误消息,因此我为消息创建了一个数组。让每条错误消息正确显示是一项挑战。

标签: ruby-on-rails ruby


【解决方案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.each do |name, messages| %>
  <div class="alert alert-<%= name %>">

  <ul>
  <% messages.each do |message| %>
    <li><%= message %></li>
  <% end %>
  </ul>

  </div>
<% end %>

在这种情况下,您最终会得到包含单个消息的列表项,但您可以使用 CSS 将它们设置为您想要的格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-06
    • 2021-07-09
    • 2018-07-17
    • 1970-01-01
    • 2014-12-15
    • 2014-04-01
    • 2015-11-27
    • 2016-07-06
    相关资源
    最近更新 更多