6

Ich habe versucht, hier nach einer Antwort zu suchen, aber ich kann nichts finden, das funktioniert. Ich habe eine Fehlermeldung "success and: danger flash" in meine App "rails" implementiert. Es funktionierte völlig in Ordnung, d. H. Der Erfolg war grün und die Gefahr war rot, mit einem Schließen-Knopf und allem, ABER seit dem Hinzufügen einiger Mailer-Dateien zeigt mein Erfolg jetzt rot an.Rails/Bootstrap - Flash Hinweis: Erfolg ist jetzt rot und nicht grün?

application.html.erb Auszug:

<body> 

    <div class="container"> 
    <% flash.each do |key, value| %> 
     <%= content_tag :div, class: "alert alert-#{key == 'notice ? 'success' : 'danger'}" do %> 
     <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
     <%= value %> 
     <% end %> 
    <% end %> 

    <%= yield %> 
    </div> 

</body> 

contact_mailer.rb

class ContactMailer < ActionMailer::Base 
    default to: '[email protected]' 

    def contact_email(name, phone, email, event_type, body) 
    @name = name 
    @phone = phone 
    @email = email 
    @event = event_type 
    @body = body 

    mail(from: email, subject: 'Contact Form Message').deliver 
    end 
end 

contacts_controller.rb

class ContactsController < ApplicationController 
    def new 
    @contact = Contact.new 
    end 

    def create 
    @contact = Contact.new(contact_params) 
    if @contact.save 
     name = params[:contact][:name] 
     phone = params[:contact][:phone] 
     email = params[:contact][:email] 
     event = params[:contact][:event_type] 
     body = params[:contact][:comments] 

     ContactMailer.contact_email(name, phone, email, event, body).deliver 
     flash[:success] = 'Message Sent.' 
     redirect_to new_contact_path 
    else 
     flash[:danger] = 'Error occurred, messgage not sent.' 
     redirect_to new_contact_path 
    end 
    end 
end 

private 
def contact_params 
    params.require(:contact).permit(:name, :phone, :email, :event_type, :comments) 
end 

und contact_email.html.erb

<!DOCTYPE html> 
<html> 
    <head> 
    <title></title> 
    </head> 
    <body> 
    <p>New Message from Hoot and Holla's Contact form, from <%= "#{@name}, #{@email}" %></p> 
    <p><%= @phone %></p> 
    <p><%= @event %></p> 
    <p><%= @body %></p> 
    </body> 
</html> 

Ich wiederhole, dass das alles völlig in Ordnung war, bevor das Mailer-Zeug reinging ... aber jetzt bin ich nur verblüfft. Bitte helfen Sie!

+0

Welchen Browser benutzen Sie? – EugZol

+1

Benutzt du den Bootstrap Sass Juwel? Und nebenbei bemerkt, sollten Sie diesen Mailer in einen Rückruf stellen. –

+0

Hallo Justin ja ich bin, und danke für den Tipp !! .. das würde es sehr aufräumen !! – RuNpiXelruN

Antwort

6

Manchmal gehen wollen Sie mehr als notice und success, wie die Bootstrap alertsinfo, verwenden danger und warning. Hier

ist die Lösung würde ich empfehlen:

<% flash.each do |key, value| %> 
    <div class="alert alert-<%= key %> alert-dismissible"> 
    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
    <%= value %> 
    </div> 
<% end %> 

auf diese Weise, wenn Sie flash[:success] = 'foo' nennen, Ihre key wäre success, und ebenfalls für info, warning, danger usw. Auf diese Weise können alle nutzen können der verschiedenen Bootstrap alerts. Wie redirect_to root_url, notice: 'welcome home'

Mit dieser Methode werden Sie 2 weitere CSS-Klassen hinzufügen müssen, dass die Bootstrap-Klassen erweitern, wenn Sie die Syntax notice: 'hello world', oder alert: 'oops' in Ihrem Umleitungen verwenden möchten.

Wenn Sie diese verwenden möchten, können Sie Sass wie unten verwenden.

.alert-alert { 
    @extend .alert-danger; 
} 

.alert-notice { 
    @extend .alert-warning; 
} 

Da mein Kommentar früher auf dem Mailer Rückruf eher eine Randnotiz war und in keinem Zusammenhang mit dieser Frage habe ich ein simple gist für ya.

+0

Oh, das ist großartig @ JustinLicata! Reinigt es so sehr (und vereinfacht). Danke, dass du dir die Zeit genommen hast, es wirklich zu schätzen! – RuNpiXelruN

+0

Gern geschehen, Prost Mate! –

1

In Ihrer Flash-Schleife prüfen Sie nur den Blitz [: notice]. Wenn es Flash [: notice] gibt, wenden Sie alert-success an. es sei denn, es gilt alert-danger. Also, was ich hier ändere. Ich bewerbe alert-success für beide flash[:success] & flash[:notice]. Also, in _flash.html.erb -

<%= content_tag :div, class: "alert alert-#{['success','notice'].include?(key) ? 'success' : 'danger'}" do %> 
+0

Ahh macht vollkommen Sinn !! .. danke wieder !! – RuNpiXelruN

0

diesen Code Versuchen in Anwendung Layout ...

<div id="wrapper"> 
<div id="page-wrapper"> 
<div class="row"> 
<div class="col-lg-12"> 
<% flash.each do |name, msg| %> 
<%= content_tag(:div, msg, :id=>"#{name}", :class `enter code here`=>"alert alert- info") %> 
<%end%> 
</div> 
</div> 
</div> 
</div> 

<script type="text/javascript"> 
window.setTimeout(function() 
{ 
$("#notice").fadeTo(500, 0).slideUp(500, function() 
{ 
$(this).remove(); 
}); 
}, 5000); 
</script> 
<%= yield%> 
+0

Einige Erklärung würde geschätzt werden. – Mark

0

Oh vielen Dank @AmitSuroliya !! Das hat perfekt funktioniert !! Ich versuche herauszufinden, was hier eigentlich im Code passiert ... ich nehme nicht an, du könntest eine kurze Erklärung geben, warum das funktioniert, könntest du? ... wenn nicht danke sowieso !! Ich schätze es so viel :)

Justin

PS für Menschen mit dem gleichen Problem und diese zu lesen .... diese Lösung wurde durch Kopieren und Einfügen in meine application.html.erb Datei und Ersetzen der content_tag Linie ich hatte ... nicht einen Teil genannt _flash.html.erb Schaffung ..just incase jemand war verwirrt da :)

+1

Willkommen Justin ....... in deiner 'flash'-Schleife, du kontrollierst dort nur Flash [: notice]. Wenn es Flash gibt [: notice], wenden Sie alert-success an. es sei denn, es gilt "Alarmgefahr". Also, was ich hier ändere. Ich verwende 'alert-success' für beide 'flash [: success] & flash [: notice]. –

+0

Ahh macht Sinn !! .. danke wieder !! – RuNpiXelruN

Verwandte Themen