Rails: перебор массива строк внутри хеша (флеш-сообщения об ошибках) - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь перебрать следующее:

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 голосов
/ 24 сентября 2018

Вместо того, что у вас есть, вам нужно:

<% 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 для их форматирования так, как вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...