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
синтаксис для любых других.