Как отобразить флеш-сообщение без перенаправления в Ruby on Rails? - PullRequest
0 голосов
/ 25 июня 2019

(Этот вопрос является продолжением следующей темы:

  • Можно ли в Rails отображать предупреждение без вызова redirect_to или render?

  • Продолжая этот вопрос здесь, поскольку в предыдущей ветке было слишком много комментариев

  • В этом вопросе было указано 2 проблемы, и одна из них была решена в этой теме
  • Следовательно, открывая эту тему, чтобы сосредоточиться только на другой проблеме, которая не была решена в этой теме)

У меня есть форма:

<%= form_tag generate_report_path(:header => true) do |f| % >
<div class="container-fluid">
  <div style="padding-right:10px">

    <%= select_tag(:report_id, options_for_select(
      [["Select Report Type", 0],
      ["Report1", 1],
      ["Report2", 2],
      ["Report3", 3]]), id: "report_selection") %>


      <%= hidden_field_tag :format, :pdf %>

У меня есть кнопка отправки и флажок рядом с ней:

<%= button_tag "Generate Report", class: 'btn btn-sm btn-primary'%>
<%= label_tag do %>
  <%= check_box_tag "format_reqd", "format_reqd", false %>
  Check for Numeric format 
<% end %>

Когда пользователь устанавливает флажок и нажимает кнопку Generate Report, я хотел бы отобразить предупреждение для пользователя «Ваш отчет будет отправлен вам по электронной почте через несколько минут»

Как мне этого достичь:

  1. Должно отображаться флэш-сообщение
  2. Перенаправление страниц или рендеринг не должны происходить

Пожалуйста, помогите!

UPDATE:

  1. Я добавил это в свой контроллер (называемый report_controller):
    def reportgen

            respond_to do |format|
              format.json { flash.now[:alert] = "Report generation has been initiated. You will receive an email in approximately 4 - 5 minutes with a link to download the report."}
            end

    end
  1. \app\views\report\reportgen.js.erb
    $("#flash").html('<%= j render partial: "shared/notice_banner" %>');
  1. application.html.erb
  <div id="flash">
    <% if alert.present? %>
      <%= render partial: "shared/notice_banner" %>
    <% end %>
  </div>

  <% flash.each do |key, value| %>
    <% if key.to_s == "alert" %>
      <div style= "color: #FF0000" class="text-center <%= flash_class(key) %>">
      <%= value %>
    </div>
    <% else %>
      <div class="lead text-center <%= flash_class(key) %>">
      <%= value %>
    </div>
    <% end %>    
  <% end %>



  <%= yield %>
  1. app\views\shared\_notice_banner.html.erb
<div data-alert class="alert-box">
  <%= alert %>
  <a href="#" class="close">&times;</a>
</div>
  1. И это мой код для добавления кнопки и флажка в моей форме:
                  <div id="generate_button" style="display: none; float:left;">
                    <%= button_tag "Generate Report", class: 'btn btn-sm btn-primary'%>
                  </div>
                  &nbsp;
                  <div id="report_type_drop" style="display: none;padding-top:5px;padding-left:5px">


                    <%= label_tag do %>
                      <%= check_box_tag "format_reqd", "format_reqd", false %>
                      Check for Numeric format
                    <% end %>
                    </div>

С приведенным выше кодом, флэш-сообщение все еще не появляется для меня!

ОБНОВЛЕНИЕ: (обновление2)

Я попытался изменить flash.now[:alert] на flash[:alert], но все равно флэш-сообщение не появляется

            respond_to do |format|
              format.json { flash[:alert] = "Report generation has been initiated. You will receive an email in approximately 4 - 5 minutes with a link to download the report."}
            end

1 Ответ

0 голосов
/ 25 июня 2019

Чтобы сделать это, вам нужно установить некоторые асинхронные действия javascript: у вас есть несколько вариантов:

  • Отправить форму с помощью ajax, затем проанализировать ответ и показать предупреждение с использованием javascript
  • Используйте ajax, чтобы проверять наличие изменений в предупреждении на сервере каждые x секунд
  • Используйте веб-сокеты, чтобы в режиме реального времени проверять наличие нового предупреждения

, котороетот, который вы хотите реализовать, зависит от ваших конкретных потребностей

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