Rails 5 flash не работает для перенаправления

Я создал приложение rails 5, и у меня есть следующий код в контроллере и представления для отображения флэш-сообщений. Я видел много таких вопросов, но не смог решить проблему.

сторона контроллера

    respond_to do |format|
      if @trigger.update(trigger_params)
        flash[:success] = 'Trigger was successfully updated.'
        format.html { redirect_to edit_project_trigger_path(@trigger, project_secret_key: @project.secret_key) }
        format.json { render :show, status: :ok, location: @trigger }
      else
        error = ''
        @trigger.errors.full_messages.each do |msg|
          error += "#{msg} <br>"
        end
        flash.now[:error] = error
        format.html { render :new }
        format.json { render json: @trigger.errors, status: :unprocessable_entity }
      end
    end

вид сбоку

<% if flash[:error].present?%>
    <div class="alert alert-danger alert-message alert-message-common" role="alert">
      <%= flash[:error].html_safe %>
    </div>
<% end %>
<% if flash[:notice].present? %>
    <div class="alert alert-success alert-message alert-message-common" role="alert">
      <%= flash[:notice].html_safe %>
    </div>
<% end %>
<% if flash[:alert].present? %>
    <div class="alert alert-danger alert-message alert-message-common" role="alert">
      <%= flash[:alert].html_safe %>
    </div>
<% end %>
<% if flash[:success].present?%>
    <div class="alert alert-success alert-message alert-message-common" role="alert">
      <%= flash[:success].html_safe %>
    </div>
<% end %>

Показывается при использовании оповещения, но сообщения об успехе не отображаются. Есть ли проблема в rails 5 или в моем коде?

Я надеюсь, что оповещение работает из-за рендеринга страницы, а успех не работает из-за перенаправления.

4 ответа

Пытаться

format.html { redirect_to edit_project_trigger_path(@trigger, project_secret_key: @project.secret_key),  notice: 'Trigger was successfully updated.' }

Вид сбоку:

<% if alert %>
    <div class="alert dark alert-icon alert-danger alert-dismissible" role="alert" id="alert">
        <%= alert %>
    </div>
<%end%>

<% if notice %>
    <div class="alert dark alert-icon alert-success alert-dismissible" role="alert" id="notice">
        <%= notice %>
    </div>
<%end%>

Только alert и notice флэш-ключи поддерживаются по умолчанию.

Добавить success:

class ApplicationController
  add_flash_types :successs

Ссылка: Руководства по Ruby

Это должно работать:

format.html { redirect_to edit_project_trigger_path(@trigger, project_secret_key: @project.secret_key), flash: {success: 'Trigger was successfully updated.'} }

По некоторым причинам в rails вы должны заметить или предупредить ключи в методе redirect_to, но если вам нужен успех или что-то еще, вы должны использовать вложенный хэш в ключе flash.

Проверьте здесь http://blog.remarkablelabs.com/2012/12/register-your-own-flash-types-rails-4-countdown-to-2013

Попробуй это:

format.html { redirect_to edit_project_trigger_path(@trigger, project_secret_key: @project.secret_key), :success => 'Trigger was successfully updated.' }

В документации Rails для redirect_to упоминается, что "есть два специальных средства доступа для часто используемых имен флэш-памяти. alert а также notice а также флэш-ведро общего назначения."Вы должны использовать обычные flash синтаксис для любых других.

Другие вопросы по тегам