Как создать оповещение с помощью redirect_to - PullRequest
0 голосов
/ 23 февраля 2020

Привет! Я хочу создать предупреждение об успехе, когда сплетня была создана, и вернуться на мою домашнюю страницу или поставить предупреждение об опасности, когда проверка не пройдена.

Мне только что удалось настроить предупреждение об ошибке.

Вот мой контроллер сплетен:

class GossipsController < ApplicationController
  def index
    @gossips = Gossip.all
  end

  def show
    @gossip = Gossip.find(params[:id])
  end

  def new
    @error = false
  end

  def create
    @gossip = Gossip.new(title: params[:title], content: params[:content], user: User.find(182))

    if @gossip.save
      redirect_to root_path 
    else
      @error = true
      render "new"
    end
  end
end

И вот мой взгляд на новое:

<% if @error %>
    <div class="alert alert-danger alert-dismissible fade show" role="alert">
      <strong>Error</strong>
      <ul>
          <% @gossip.errors.full_messages.each do |message| %>
            <li><%= message %></li>
          <% end %>
        </ul>
      <button type="button" class="close" data-dismiss="alert" aria-label="Close">
        <span aria-hidden="true">&times;</span>
      </button>
    </div>
<% end %>   

<h2>Create your own gossip !</h2> <br><br>

<%= form_tag url_for(action: 'create'), method: "post" do %>

    <%= label_tag 'Title :' %> <br>
    <%= text_field_tag 'title'%> <br><br>

    <%= label_tag 'Content :' %> <br>
    <%= text_area_tag 'content'%> <br><br>

    <%= submit_tag "Create Gossip" %>
<% end %>

Я пытался сделать то же самое для предупреждения об успехе, но если я поставлю @success = true в контроллере и <% if @success %> в индексном представлении, которые не работают. У меня нет никаких идей.

Скажите, если вам нужна какая-то часть моего кода.

Я пробовал с fla sh, но это не сработало и все, что я хочу тот же стиль с предупреждением об ошибке и успехе

Ответы [ 2 ]

1 голос
/ 23 февраля 2020

создать fla sh сообщение частичное приложение / views / layouts / _fla sh. html .erb (укажите имя файла с подчеркиванием, поскольку оно частичное)

<% flash.each do |key, value| %> 
  <div class="alert alert-<%= key == "success" ? "success" : "danger"  %>">
    <%= value %>
  </div>
<% end %> 

добавить частичное в ваше приложение /views/layouts/application.html.erb

<!DOCTYPE html>
<html lang="en">
<head>

</head>
<body>
  ...
  <%= render 'layouts/flash' %> 
  <%= yield %>
</Body>
</html>

в вашем контроллере

def create
  @gossip = Gossip.new(title: params[:title], content: params[:content], user: User.find(182))

  if @gossip.save
    flash[:success] = 'success'
    redirect_to root_path 
  else
    flash[:danger] = @gossip.errors.full_messages[0]
    render "new"
  end
end
1 голос
/ 23 февраля 2020

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

## 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 %>
...