Не пишите в каждом представлении формы, вместо этого вы можете просто написать общий код для отображения предупреждений, связанных с успехом или ошибкой, а затем использовать его с любых контроллеров: -
## app/views/layouts/application.html.erb
<html>
<body>
<%= render 'layouts/header' %> ## your header layout
<div class="container">
<% flash.each do |key, value| %>
<div class="alert <%= flash_class(key) %>"><%= value.try(:html_safe) %></div>
<% end %>
<%= yield %>
<%= render 'layouts/footer' %> ## your footer layout
</div>
</body>
</html>
Использовать помощник для получите правильные bootstrap классы в соответствии с вашими требованиями: -
module ApplicationHelper
def flash_class(level)
level = level.to_sym
case level
when :notice then "alert-info"
when :success then "alert-success"
when :error then "alert-danger"
when :alert then "alert-warning"
end
end
end
и затем используйте вышеуказанный код в любом контроллере: -
if @gossip.save
flash[:success] = "Your success custom message."
redirect_to root_path
else
err_msg = ""
flash.now[:error] = @gossip.errors.full_messages.map{|msg| err_msg << "#{msg} <br> "}
render "new"
end
Примечание : - Используйте fla sh при перенаправлении и fla sh .now при рендеринге.
отредактированный контент: -
Добавление тега <br>
по ошибке перед отображением сообщений, а затем на странице просмотра добавьте .html_safe
для отображения каждой ошибки в следующей строке. Этот хак должен работать, и пользователь сможет видеть все сообщения об ошибках, связанных с объектом.
flash.now[:error] = @gossip.errors.full_messages.map{|msg| err_msg << "#{msg} <br> "}
В представлении
<% flash.each do |key, value| %>
<div class="alert <%= flash_class(key) %>"><%= value.try(:html_safe) %></div>
<% end %>